[VM/Service] Create package:vm_service_protos for distributing code for working with Perfetto protos

TEST=get_perfetto_vm_timeline_rpc_test and
get_perfetto_cpu_samples_rpc_test

Change-Id: I4a001ec634b939a258e337630633ce826e0f8b4d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/303022
Reviewed-by: Ben Konyi <bkonyi@google.com>
Reviewed-by: Jake Macdonald <jakemac@google.com>
Commit-Queue: Derek Xu <derekx@google.com>
This commit is contained in:
Derek Xu 2023-06-15 19:01:00 +00:00 committed by Commit Queue
parent a54d2ec9b8
commit be125afc18
53 changed files with 3415 additions and 42 deletions

View file

@ -9,8 +9,6 @@ repository: https://github.com/dart-lang/sdk/tree/main/pkg/vm_service
environment:
sdk: '>=2.19.0 <4.0.0'
dependencies:
# We use 'any' version constraints here as we get our package versions from
# the dart-lang/sdk repo's DEPS file. Note that this is a special case; the
# best practice for packages is to specify their compatible version ranges.
@ -25,6 +23,7 @@ dev_dependencies:
pub_semver: any
test_package: any
test: any
vm_service_protos: any
dependency_overrides:
test_package:

View file

@ -0,0 +1,98 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:convert';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart' hide Timeline;
import 'package:vm_service_protos/vm_service_protos.dart';
import 'common/test_helper.dart';
int computeTimeOriginNanos(List<TracePacket> packets) {
final packetsWithPerfSamples =
packets.where((packet) => packet.hasPerfSample()).toList();
if (packetsWithPerfSamples.length == 0) {
return 0;
}
int smallest = packetsWithPerfSamples.first.timestamp.toInt();
for (int i = 0; i < packetsWithPerfSamples.length; i++) {
if (packetsWithPerfSamples[i].timestamp < smallest) {
smallest = packetsWithPerfSamples[i].timestamp.toInt();
}
}
return smallest;
}
int computeTimeExtentNanos(List<TracePacket> packets, int timeOrigin) {
final packetsWithPerfSamples =
packets.where((packet) => packet.hasPerfSample()).toList();
if (packetsWithPerfSamples.length == 0) {
return 0;
}
int largestExtent = packetsWithPerfSamples[0].timestamp.toInt() - timeOrigin;
for (var i = 0; i < packetsWithPerfSamples.length; i++) {
int duration = packetsWithPerfSamples[i].timestamp.toInt() - timeOrigin;
if (duration > largestExtent) {
largestExtent = duration;
}
}
return largestExtent;
}
Iterable<PerfSample> extractPerfSamplesFromTracePackets(
List<TracePacket> packets) {
return packets
.where((packet) => packet.hasPerfSample())
.map((packet) => packet.perfSample);
}
final tests = <IsolateTest>[
(VmService service, IsolateRef isolateRef) async {
final result = await service.getPerfettoCpuSamples(isolateRef.id!);
expect(result.type, 'PerfettoCpuSamples');
expect(result.samplePeriod, isPositive);
expect(result.maxStackDepth, isPositive);
expect(result.sampleCount, isPositive);
expect(result.timeOriginMicros, isPositive);
expect(result.timeExtentMicros, isPositive);
expect(result.pid, isNotNull);
final trace = Trace.fromBuffer(base64Decode(result.samples!));
final packets = trace.packet;
int frameCount = 0;
int callstackCount = 0;
int perfSampleCount = 0;
for (final packet in packets) {
if (packet.hasInternedData()) {
frameCount += packet.internedData.frames.length;
callstackCount += packet.internedData.callstacks.length;
}
if (packet.hasPerfSample()) {
perfSampleCount += 1;
}
}
expect(frameCount, isPositive);
expect(callstackCount, isPositive);
expect(perfSampleCount, callstackCount);
// Calculate the time window of events.
final timeOriginNanos = computeTimeOriginNanos(packets);
final timeExtentNanos = computeTimeExtentNanos(packets, timeOriginNanos);
// Query for the samples within the time window.
final filteredResult = await service.getPerfettoCpuSamples(isolateRef.id!,
timeOriginMicros: timeOriginNanos ~/ 1000,
timeExtentMicros: timeExtentNanos ~/ 1000);
// Verify that we have the same number of [PerfSample]s.
final filteredTrace =
Trace.fromBuffer(base64Decode(filteredResult.samples!));
expect(extractPerfSamplesFromTracePackets(filteredTrace.packet).length,
extractPerfSamplesFromTracePackets(packets).length);
},
];
main([args = const <String>[]]) async {
await runIsolateTests(args, tests, 'get_perfetto_cpu_samples_rpc_test.dart',
extraArgs: ['--profiler=true']);
}

View file

@ -0,0 +1,223 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:collection';
import 'dart:convert';
import 'dart:developer';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart' hide Timeline;
import 'package:vm_service_protos/vm_service_protos.dart';
import 'common/test_helper.dart';
void primeTimeline() {
Timeline.startSync('apple');
Timeline.instantSync('ISYNC', arguments: {'fruit': 'banana'});
Timeline.finishSync();
final parentTask = TimelineTask.withTaskId(42);
final task = TimelineTask(parent: parentTask, filterKey: 'testFilter');
task.start('TASK1', arguments: {'task1-start-key': 'task1-start-value'});
task.instant('ITASK',
arguments: {'task1-instant-key': 'task1-instant-value'});
task.finish(arguments: {'task1-finish-key': 'task1-finish-value'});
final flow = Flow.begin(id: 123);
Timeline.startSync('peach', flow: flow);
Timeline.finishSync();
Timeline.startSync('watermelon', flow: Flow.step(flow.id));
Timeline.finishSync();
Timeline.startSync('pear', flow: Flow.end(flow.id));
Timeline.finishSync();
}
Iterable<TrackEvent> extractTrackEventsFromTracePackets(
List<TracePacket> packets) {
return packets
.where((packet) => packet.hasTrackEvent())
.map((packet) => packet.trackEvent);
}
Map<String, String> mapFromListOfDebugAnnotations(
List<DebugAnnotation> debugAnnotations) {
return HashMap.fromEntries(debugAnnotations.map((a) {
if (a.hasStringValue()) {
return MapEntry(a.name, a.stringValue);
} else if (a.hasLegacyJsonValue()) {
return MapEntry(a.name, a.legacyJsonValue);
} else {
throw 'We should not be writing annotations without values';
}
}));
}
void checkThatAllEventsHaveIsolateNumbers(Iterable<TrackEvent> events) {
for (TrackEvent event in events) {
final debugAnnotations =
mapFromListOfDebugAnnotations(event.debugAnnotations);
expect(debugAnnotations['isolateGroupId'], isNotNull);
expect(debugAnnotations['isolateId'], isNotNull);
}
}
bool mapContains(Map<String, dynamic> map, Map<String, String> submap) {
for (final key in submap.keys) {
if (map[key] != submap[key]) {
return false;
}
}
return true;
}
int countNumberOfEventsOfType(
Iterable<TrackEvent> events, TrackEvent_Type type) {
return events.where((event) {
return event.type == type;
}).length;
}
bool eventsContains(Iterable<TrackEvent> events, TrackEvent_Type type,
{String? name, int? flowId, Map<String, String>? arguments}) {
return events.any((event) {
if (event.type != type) {
return false;
}
if (name != null && event.name != name) {
return false;
}
if (flowId != null &&
(event.flowIds.isEmpty || event.flowIds.first != flowId)) {
return false;
}
if (event.debugAnnotations.isEmpty) {
return arguments == null;
} else {
final Map<String, dynamic> dartArguments = jsonDecode(
mapFromListOfDebugAnnotations(
event.debugAnnotations)['Dart Arguments']!);
if (arguments == null) {
return dartArguments.isEmpty;
} else {
return mapContains(dartArguments, arguments);
}
}
});
}
int computeTimeOriginNanos(List<TracePacket> packets) {
final packetsWithEvents =
packets.where((packet) => packet.hasTrackEvent()).toList();
if (packetsWithEvents.length == 0) {
return 0;
}
int smallest = packetsWithEvents.first.timestamp.toInt();
for (int i = 0; i < packetsWithEvents.length; i++) {
if (packetsWithEvents[i].timestamp < smallest) {
smallest = packetsWithEvents[i].timestamp.toInt();
}
}
return smallest;
}
int computeTimeExtentNanos(List<TracePacket> packets, int timeOrigin) {
final packetsWithEvents =
packets.where((packet) => packet.hasTrackEvent()).toList();
if (packetsWithEvents.length == 0) {
return 0;
}
int largestExtent = packetsWithEvents[0].timestamp.toInt() - timeOrigin;
for (var i = 0; i < packetsWithEvents.length; i++) {
int duration = packetsWithEvents[i].timestamp.toInt() - timeOrigin;
if (duration > largestExtent) {
largestExtent = duration;
}
}
return largestExtent;
}
final tests = <VMTest>[
(VmService service) async {
final result = await service.getPerfettoVMTimeline();
expect(result.type, 'PerfettoTimeline');
expect(result.timeOriginMicros, isPositive);
expect(result.timeExtentMicros, isPositive);
final trace = Trace.fromBuffer(base64Decode(result.trace!));
final packets = trace.packet;
final events = extractTrackEventsFromTracePackets(packets);
expect(events.length, greaterThanOrEqualTo(12));
checkThatAllEventsHaveIsolateNumbers(events);
expect(
countNumberOfEventsOfType(events, TrackEvent_Type.TYPE_SLICE_BEGIN),
countNumberOfEventsOfType(events, TrackEvent_Type.TYPE_SLICE_END),
);
expect(
eventsContains(events, TrackEvent_Type.TYPE_INSTANT,
name: 'ISYNC', arguments: {'fruit': 'banana'}),
true);
expect(
eventsContains(events, TrackEvent_Type.TYPE_SLICE_BEGIN, name: 'apple'),
true);
expect(
eventsContains(events, TrackEvent_Type.TYPE_SLICE_BEGIN,
name: 'TASK1',
arguments: {
'filterKey': 'testFilter',
'task1-start-key': 'task1-start-value',
'parentId': 42.toRadixString(16)
}),
true);
expect(
eventsContains(events, TrackEvent_Type.TYPE_SLICE_END, arguments: {
'filterKey': 'testFilter',
'task1-finish-key': 'task1-finish-value',
}),
true);
expect(
eventsContains(events, TrackEvent_Type.TYPE_INSTANT,
name: 'ITASK',
arguments: {
'filterKey': 'testFilter',
'task1-instant-key': 'task1-instant-value',
}),
true);
expect(
eventsContains(events, TrackEvent_Type.TYPE_SLICE_BEGIN,
name: 'peach', flowId: 123),
true);
expect(
eventsContains(events, TrackEvent_Type.TYPE_SLICE_BEGIN,
name: 'watermelon', flowId: 123),
true);
expect(
eventsContains(events, TrackEvent_Type.TYPE_SLICE_BEGIN,
name: 'pear', flowId: 123),
true);
// Calculate the time window of events.
final timeOriginNanos = computeTimeOriginNanos(packets);
final timeExtentNanos = computeTimeExtentNanos(packets, timeOriginNanos);
// Query for the timeline with the time window.
final filteredResult = await service.getPerfettoVMTimeline(
timeOriginMicros: timeOriginNanos ~/ 1000,
timeExtentMicros: timeExtentNanos ~/ 1000);
// Verify that we have the same number of events.
final filteredTrace = Trace.fromBuffer(base64Decode(filteredResult.trace!));
expect(extractTrackEventsFromTracePackets(filteredTrace.packet).length,
events.length);
},
];
main([args = const <String>[]]) async {
await runVMTests(
args, tests, 'get_perfetto_vm_timeline_rpc_test.dart',
testeeBefore: primeTimeline,
// TODO(derekx): runtime/observatory/tests/service/get_vm_timeline_rpc_test
// runs with --complete-timeline, but for performance reasons, we cannot do
// the same until this [runVMTests] method supports the [executableArgs] and
// [compileToKernelFirst] parameters.
extraArgs: ['--timeline-streams=Dart'],
);
}

View file

@ -0,0 +1,4 @@
## 1.0.0
- Initial version
- Add code for working with Perfetto protos, which can be imported from
`'package:vm_service_protos/vm_service_protos.dart'`.

View file

@ -0,0 +1,27 @@
Copyright 2023, the Dart project authors.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Google LLC nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -0,0 +1 @@
file:/tools/OWNERS_VM

View file

@ -0,0 +1,20 @@
[![pub package](https://img.shields.io/pub/v/vm_service_protos.svg)](https://pub.dev/packages/vm_service_protos)
[![package publisher](https://img.shields.io/pub/publisher/vm_service_protos.svg)](https://pub.dev/packages/vm_service_protos/publisher)
A library for decoding protos returned by a service implementing the Dart VM
service protocol.
## Usage
Refer to these examples:
- [get_perfetto_vm_timeline_rpc_test](https://github.com/dart-lang/sdk/blob/main/pkg/vm_service/test/get_perfetto_vm_timeline_rpc_test.dart)
- [get_perfetto_cpu_samples_rpc_test](https://github.com/dart-lang/sdk/blob/main/pkg/vm_service/test/get_perfetto_cpu_samples_rpc_test.dart)
to see how the library's API is used.
## Features and bugs
Please file feature requests and bugs at the [issue tracker][tracker].
[tracker]: https://github.com/dart-lang/sdk/issues

View file

@ -0,0 +1,7 @@
include: package:lints/recommended.yaml
linter:
rules:
- comment_references
- directives_ordering
- prefer_single_quotes

View file

@ -0,0 +1,22 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/common/builtin_clock.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
export 'builtin_clock.pbenum.dart';

View file

@ -0,0 +1,39 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/common/builtin_clock.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class BuiltinClock extends $pb.ProtobufEnum {
static const BuiltinClock BUILTIN_CLOCK_MONOTONIC =
BuiltinClock._(3, _omitEnumNames ? '' : 'BUILTIN_CLOCK_MONOTONIC');
static const $core.List<BuiltinClock> values = <BuiltinClock>[
BUILTIN_CLOCK_MONOTONIC,
];
static final $core.Map<$core.int, BuiltinClock> _byValue =
$pb.ProtobufEnum.initByValue(values);
static BuiltinClock? valueOf($core.int value) => _byValue[value];
const BuiltinClock._($core.int v, $core.String n) : super(v, n);
}
const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');

View file

@ -0,0 +1,34 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/common/builtin_clock.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use builtinClockDescriptor instead')
const BuiltinClock$json = {
'1': 'BuiltinClock',
'2': [
{'1': 'BUILTIN_CLOCK_MONOTONIC', '2': 3},
],
};
/// Descriptor for `BuiltinClock`. Decode as a `google.protobuf.EnumDescriptorProto`.
final $typed_data.Uint8List builtinClockDescriptor = $convert.base64Decode(
'CgxCdWlsdGluQ2xvY2sSGwoXQlVJTFRJTl9DTE9DS19NT05PVE9OSUMQAw==');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/common/builtin_clock.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'builtin_clock.pb.dart';

View file

@ -0,0 +1,162 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/clock_snapshot.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:fixnum/fixnum.dart' as $fixnum;
import 'package:protobuf/protobuf.dart' as $pb;
import '../common/builtin_clock.pbenum.dart' as $0;
class ClockSnapshot_Clock extends $pb.GeneratedMessage {
factory ClockSnapshot_Clock() => create();
ClockSnapshot_Clock._() : super();
factory ClockSnapshot_Clock.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory ClockSnapshot_Clock.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'ClockSnapshot.Clock',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$core.int>(1, _omitFieldNames ? '' : 'clockId', $pb.PbFieldType.OU3)
..a<$fixnum.Int64>(
2, _omitFieldNames ? '' : 'timestamp', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
ClockSnapshot_Clock clone() => ClockSnapshot_Clock()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
ClockSnapshot_Clock copyWith(void Function(ClockSnapshot_Clock) updates) =>
super.copyWith((message) => updates(message as ClockSnapshot_Clock))
as ClockSnapshot_Clock;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ClockSnapshot_Clock create() => ClockSnapshot_Clock._();
ClockSnapshot_Clock createEmptyInstance() => create();
static $pb.PbList<ClockSnapshot_Clock> createRepeated() =>
$pb.PbList<ClockSnapshot_Clock>();
@$core.pragma('dart2js:noInline')
static ClockSnapshot_Clock getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<ClockSnapshot_Clock>(create);
static ClockSnapshot_Clock? _defaultInstance;
@$pb.TagNumber(1)
$core.int get clockId => $_getIZ(0);
@$pb.TagNumber(1)
set clockId($core.int v) {
$_setUnsignedInt32(0, v);
}
@$pb.TagNumber(1)
$core.bool hasClockId() => $_has(0);
@$pb.TagNumber(1)
void clearClockId() => clearField(1);
@$pb.TagNumber(2)
$fixnum.Int64 get timestamp => $_getI64(1);
@$pb.TagNumber(2)
set timestamp($fixnum.Int64 v) {
$_setInt64(1, v);
}
@$pb.TagNumber(2)
$core.bool hasTimestamp() => $_has(1);
@$pb.TagNumber(2)
void clearTimestamp() => clearField(2);
}
class ClockSnapshot extends $pb.GeneratedMessage {
factory ClockSnapshot() => create();
ClockSnapshot._() : super();
factory ClockSnapshot.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory ClockSnapshot.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'ClockSnapshot',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..pc<ClockSnapshot_Clock>(
1, _omitFieldNames ? '' : 'clocks', $pb.PbFieldType.PM,
subBuilder: ClockSnapshot_Clock.create)
..e<$0.BuiltinClock>(
2, _omitFieldNames ? '' : 'primaryTraceClock', $pb.PbFieldType.OE,
defaultOrMaker: $0.BuiltinClock.BUILTIN_CLOCK_MONOTONIC,
valueOf: $0.BuiltinClock.valueOf,
enumValues: $0.BuiltinClock.values)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
ClockSnapshot clone() => ClockSnapshot()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
ClockSnapshot copyWith(void Function(ClockSnapshot) updates) =>
super.copyWith((message) => updates(message as ClockSnapshot))
as ClockSnapshot;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ClockSnapshot create() => ClockSnapshot._();
ClockSnapshot createEmptyInstance() => create();
static $pb.PbList<ClockSnapshot> createRepeated() =>
$pb.PbList<ClockSnapshot>();
@$core.pragma('dart2js:noInline')
static ClockSnapshot getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<ClockSnapshot>(create);
static ClockSnapshot? _defaultInstance;
@$pb.TagNumber(1)
$core.List<ClockSnapshot_Clock> get clocks => $_getList(0);
@$pb.TagNumber(2)
$0.BuiltinClock get primaryTraceClock => $_getN(1);
@$pb.TagNumber(2)
set primaryTraceClock($0.BuiltinClock v) {
setField(2, v);
}
@$pb.TagNumber(2)
$core.bool hasPrimaryTraceClock() => $_has(1);
@$pb.TagNumber(2)
void clearPrimaryTraceClock() => clearField(2);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,62 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/clock_snapshot.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use clockSnapshotDescriptor instead')
const ClockSnapshot$json = {
'1': 'ClockSnapshot',
'2': [
{
'1': 'clocks',
'3': 1,
'4': 3,
'5': 11,
'6': '.perfetto.protos.ClockSnapshot.Clock',
'10': 'clocks'
},
{
'1': 'primary_trace_clock',
'3': 2,
'4': 1,
'5': 14,
'6': '.perfetto.protos.BuiltinClock',
'10': 'primaryTraceClock'
},
],
'3': [ClockSnapshot_Clock$json],
};
@$core.Deprecated('Use clockSnapshotDescriptor instead')
const ClockSnapshot_Clock$json = {
'1': 'Clock',
'2': [
{'1': 'clock_id', '3': 1, '4': 1, '5': 13, '10': 'clockId'},
{'1': 'timestamp', '3': 2, '4': 1, '5': 4, '10': 'timestamp'},
],
};
/// Descriptor for `ClockSnapshot`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List clockSnapshotDescriptor = $convert.base64Decode(
'Cg1DbG9ja1NuYXBzaG90EjwKBmNsb2NrcxgBIAMoCzIkLnBlcmZldHRvLnByb3Rvcy5DbG9ja1'
'NuYXBzaG90LkNsb2NrUgZjbG9ja3MSTQoTcHJpbWFyeV90cmFjZV9jbG9jaxgCIAEoDjIdLnBl'
'cmZldHRvLnByb3Rvcy5CdWlsdGluQ2xvY2tSEXByaW1hcnlUcmFjZUNsb2NrGkAKBUNsb2NrEh'
'kKCGNsb2NrX2lkGAEgASgNUgdjbG9ja0lkEhwKCXRpbWVzdGFtcBgCIAEoBFIJdGltZXN0YW1w');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/clock_snapshot.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'clock_snapshot.pb.dart';

View file

@ -0,0 +1,97 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/interned_data/interned_data.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
import '../profiling/profile_common.pb.dart' as $2;
class InternedData extends $pb.GeneratedMessage {
factory InternedData() => create();
InternedData._() : super();
factory InternedData.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory InternedData.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'InternedData',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..pc<$2.InternedString>(
5, _omitFieldNames ? '' : 'functionNames', $pb.PbFieldType.PM,
subBuilder: $2.InternedString.create)
..pc<$2.Frame>(6, _omitFieldNames ? '' : 'frames', $pb.PbFieldType.PM,
subBuilder: $2.Frame.create)
..pc<$2.Callstack>(
7, _omitFieldNames ? '' : 'callstacks', $pb.PbFieldType.PM,
subBuilder: $2.Callstack.create)
..pc<$2.InternedString>(
17, _omitFieldNames ? '' : 'mappingPaths', $pb.PbFieldType.PM,
subBuilder: $2.InternedString.create)
..pc<$2.Mapping>(19, _omitFieldNames ? '' : 'mappings', $pb.PbFieldType.PM,
subBuilder: $2.Mapping.create)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
InternedData clone() => InternedData()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
InternedData copyWith(void Function(InternedData) updates) =>
super.copyWith((message) => updates(message as InternedData))
as InternedData;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static InternedData create() => InternedData._();
InternedData createEmptyInstance() => create();
static $pb.PbList<InternedData> createRepeated() =>
$pb.PbList<InternedData>();
@$core.pragma('dart2js:noInline')
static InternedData getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<InternedData>(create);
static InternedData? _defaultInstance;
@$pb.TagNumber(5)
$core.List<$2.InternedString> get functionNames => $_getList(0);
@$pb.TagNumber(6)
$core.List<$2.Frame> get frames => $_getList(1);
@$pb.TagNumber(7)
$core.List<$2.Callstack> get callstacks => $_getList(2);
@$pb.TagNumber(17)
$core.List<$2.InternedString> get mappingPaths => $_getList(3);
@$pb.TagNumber(19)
$core.List<$2.Mapping> get mappings => $_getList(4);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,78 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/interned_data/interned_data.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use internedDataDescriptor instead')
const InternedData$json = {
'1': 'InternedData',
'2': [
{
'1': 'mapping_paths',
'3': 17,
'4': 3,
'5': 11,
'6': '.perfetto.protos.InternedString',
'10': 'mappingPaths'
},
{
'1': 'function_names',
'3': 5,
'4': 3,
'5': 11,
'6': '.perfetto.protos.InternedString',
'10': 'functionNames'
},
{
'1': 'mappings',
'3': 19,
'4': 3,
'5': 11,
'6': '.perfetto.protos.Mapping',
'10': 'mappings'
},
{
'1': 'frames',
'3': 6,
'4': 3,
'5': 11,
'6': '.perfetto.protos.Frame',
'10': 'frames'
},
{
'1': 'callstacks',
'3': 7,
'4': 3,
'5': 11,
'6': '.perfetto.protos.Callstack',
'10': 'callstacks'
},
],
};
/// Descriptor for `InternedData`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List internedDataDescriptor = $convert.base64Decode(
'CgxJbnRlcm5lZERhdGESRAoNbWFwcGluZ19wYXRocxgRIAMoCzIfLnBlcmZldHRvLnByb3Rvcy'
'5JbnRlcm5lZFN0cmluZ1IMbWFwcGluZ1BhdGhzEkYKDmZ1bmN0aW9uX25hbWVzGAUgAygLMh8u'
'cGVyZmV0dG8ucHJvdG9zLkludGVybmVkU3RyaW5nUg1mdW5jdGlvbk5hbWVzEjQKCG1hcHBpbm'
'dzGBMgAygLMhgucGVyZmV0dG8ucHJvdG9zLk1hcHBpbmdSCG1hcHBpbmdzEi4KBmZyYW1lcxgG'
'IAMoCzIWLnBlcmZldHRvLnByb3Rvcy5GcmFtZVIGZnJhbWVzEjoKCmNhbGxzdGFja3MYByADKA'
'syGi5wZXJmZXR0by5wcm90b3MuQ2FsbHN0YWNrUgpjYWxsc3RhY2tz');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/interned_data/interned_data.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'interned_data.pb.dart';

View file

@ -0,0 +1,309 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/profiling/profile_common.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:fixnum/fixnum.dart' as $fixnum;
import 'package:protobuf/protobuf.dart' as $pb;
class InternedString extends $pb.GeneratedMessage {
factory InternedString() => create();
InternedString._() : super();
factory InternedString.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory InternedString.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'InternedString',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'iid', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..a<$core.List<$core.int>>(
2, _omitFieldNames ? '' : 'str', $pb.PbFieldType.OY)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
InternedString clone() => InternedString()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
InternedString copyWith(void Function(InternedString) updates) =>
super.copyWith((message) => updates(message as InternedString))
as InternedString;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static InternedString create() => InternedString._();
InternedString createEmptyInstance() => create();
static $pb.PbList<InternedString> createRepeated() =>
$pb.PbList<InternedString>();
@$core.pragma('dart2js:noInline')
static InternedString getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<InternedString>(create);
static InternedString? _defaultInstance;
@$pb.TagNumber(1)
$fixnum.Int64 get iid => $_getI64(0);
@$pb.TagNumber(1)
set iid($fixnum.Int64 v) {
$_setInt64(0, v);
}
@$pb.TagNumber(1)
$core.bool hasIid() => $_has(0);
@$pb.TagNumber(1)
void clearIid() => clearField(1);
@$pb.TagNumber(2)
$core.List<$core.int> get str => $_getN(1);
@$pb.TagNumber(2)
set str($core.List<$core.int> v) {
$_setBytes(1, v);
}
@$pb.TagNumber(2)
$core.bool hasStr() => $_has(1);
@$pb.TagNumber(2)
void clearStr() => clearField(2);
}
class Mapping extends $pb.GeneratedMessage {
factory Mapping() => create();
Mapping._() : super();
factory Mapping.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory Mapping.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'Mapping',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'iid', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..p<$fixnum.Int64>(
7, _omitFieldNames ? '' : 'pathStringIds', $pb.PbFieldType.PU6)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
Mapping clone() => Mapping()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
Mapping copyWith(void Function(Mapping) updates) =>
super.copyWith((message) => updates(message as Mapping)) as Mapping;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Mapping create() => Mapping._();
Mapping createEmptyInstance() => create();
static $pb.PbList<Mapping> createRepeated() => $pb.PbList<Mapping>();
@$core.pragma('dart2js:noInline')
static Mapping getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Mapping>(create);
static Mapping? _defaultInstance;
@$pb.TagNumber(1)
$fixnum.Int64 get iid => $_getI64(0);
@$pb.TagNumber(1)
set iid($fixnum.Int64 v) {
$_setInt64(0, v);
}
@$pb.TagNumber(1)
$core.bool hasIid() => $_has(0);
@$pb.TagNumber(1)
void clearIid() => clearField(1);
@$pb.TagNumber(7)
$core.List<$fixnum.Int64> get pathStringIds => $_getList(1);
}
class Frame extends $pb.GeneratedMessage {
factory Frame() => create();
Frame._() : super();
factory Frame.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory Frame.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'Frame',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'iid', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..a<$fixnum.Int64>(
2, _omitFieldNames ? '' : 'functionNameId', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..a<$fixnum.Int64>(
3, _omitFieldNames ? '' : 'mappingId', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..a<$fixnum.Int64>(4, _omitFieldNames ? '' : 'relPc', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
Frame clone() => Frame()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
Frame copyWith(void Function(Frame) updates) =>
super.copyWith((message) => updates(message as Frame)) as Frame;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Frame create() => Frame._();
Frame createEmptyInstance() => create();
static $pb.PbList<Frame> createRepeated() => $pb.PbList<Frame>();
@$core.pragma('dart2js:noInline')
static Frame getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Frame>(create);
static Frame? _defaultInstance;
@$pb.TagNumber(1)
$fixnum.Int64 get iid => $_getI64(0);
@$pb.TagNumber(1)
set iid($fixnum.Int64 v) {
$_setInt64(0, v);
}
@$pb.TagNumber(1)
$core.bool hasIid() => $_has(0);
@$pb.TagNumber(1)
void clearIid() => clearField(1);
@$pb.TagNumber(2)
$fixnum.Int64 get functionNameId => $_getI64(1);
@$pb.TagNumber(2)
set functionNameId($fixnum.Int64 v) {
$_setInt64(1, v);
}
@$pb.TagNumber(2)
$core.bool hasFunctionNameId() => $_has(1);
@$pb.TagNumber(2)
void clearFunctionNameId() => clearField(2);
@$pb.TagNumber(3)
$fixnum.Int64 get mappingId => $_getI64(2);
@$pb.TagNumber(3)
set mappingId($fixnum.Int64 v) {
$_setInt64(2, v);
}
@$pb.TagNumber(3)
$core.bool hasMappingId() => $_has(2);
@$pb.TagNumber(3)
void clearMappingId() => clearField(3);
@$pb.TagNumber(4)
$fixnum.Int64 get relPc => $_getI64(3);
@$pb.TagNumber(4)
set relPc($fixnum.Int64 v) {
$_setInt64(3, v);
}
@$pb.TagNumber(4)
$core.bool hasRelPc() => $_has(3);
@$pb.TagNumber(4)
void clearRelPc() => clearField(4);
}
class Callstack extends $pb.GeneratedMessage {
factory Callstack() => create();
Callstack._() : super();
factory Callstack.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory Callstack.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'Callstack',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'iid', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..p<$fixnum.Int64>(
2, _omitFieldNames ? '' : 'frameIds', $pb.PbFieldType.PU6)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
Callstack clone() => Callstack()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
Callstack copyWith(void Function(Callstack) updates) =>
super.copyWith((message) => updates(message as Callstack)) as Callstack;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Callstack create() => Callstack._();
Callstack createEmptyInstance() => create();
static $pb.PbList<Callstack> createRepeated() => $pb.PbList<Callstack>();
@$core.pragma('dart2js:noInline')
static Callstack getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Callstack>(create);
static Callstack? _defaultInstance;
@$pb.TagNumber(1)
$fixnum.Int64 get iid => $_getI64(0);
@$pb.TagNumber(1)
set iid($fixnum.Int64 v) {
$_setInt64(0, v);
}
@$pb.TagNumber(1)
$core.bool hasIid() => $_has(0);
@$pb.TagNumber(1)
void clearIid() => clearField(1);
@$pb.TagNumber(2)
$core.List<$fixnum.Int64> get frameIds => $_getList(1);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,80 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/profiling/profile_common.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use internedStringDescriptor instead')
const InternedString$json = {
'1': 'InternedString',
'2': [
{'1': 'iid', '3': 1, '4': 1, '5': 4, '10': 'iid'},
{'1': 'str', '3': 2, '4': 1, '5': 12, '10': 'str'},
],
};
/// Descriptor for `InternedString`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List internedStringDescriptor = $convert.base64Decode(
'Cg5JbnRlcm5lZFN0cmluZxIQCgNpaWQYASABKARSA2lpZBIQCgNzdHIYAiABKAxSA3N0cg==');
@$core.Deprecated('Use mappingDescriptor instead')
const Mapping$json = {
'1': 'Mapping',
'2': [
{'1': 'iid', '3': 1, '4': 1, '5': 4, '10': 'iid'},
{'1': 'path_string_ids', '3': 7, '4': 3, '5': 4, '10': 'pathStringIds'},
],
};
/// Descriptor for `Mapping`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List mappingDescriptor = $convert.base64Decode(
'CgdNYXBwaW5nEhAKA2lpZBgBIAEoBFIDaWlkEiYKD3BhdGhfc3RyaW5nX2lkcxgHIAMoBFINcG'
'F0aFN0cmluZ0lkcw==');
@$core.Deprecated('Use frameDescriptor instead')
const Frame$json = {
'1': 'Frame',
'2': [
{'1': 'iid', '3': 1, '4': 1, '5': 4, '10': 'iid'},
{'1': 'function_name_id', '3': 2, '4': 1, '5': 4, '10': 'functionNameId'},
{'1': 'mapping_id', '3': 3, '4': 1, '5': 4, '10': 'mappingId'},
{'1': 'rel_pc', '3': 4, '4': 1, '5': 4, '10': 'relPc'},
],
};
/// Descriptor for `Frame`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List frameDescriptor = $convert.base64Decode(
'CgVGcmFtZRIQCgNpaWQYASABKARSA2lpZBIoChBmdW5jdGlvbl9uYW1lX2lkGAIgASgEUg5mdW'
'5jdGlvbk5hbWVJZBIdCgptYXBwaW5nX2lkGAMgASgEUgltYXBwaW5nSWQSFQoGcmVsX3BjGAQg'
'ASgEUgVyZWxQYw==');
@$core.Deprecated('Use callstackDescriptor instead')
const Callstack$json = {
'1': 'Callstack',
'2': [
{'1': 'iid', '3': 1, '4': 1, '5': 4, '10': 'iid'},
{'1': 'frame_ids', '3': 2, '4': 3, '5': 4, '10': 'frameIds'},
],
};
/// Descriptor for `Callstack`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List callstackDescriptor = $convert.base64Decode(
'CglDYWxsc3RhY2sSEAoDaWlkGAEgASgEUgNpaWQSGwoJZnJhbWVfaWRzGAIgAygEUghmcmFtZU'
'lkcw==');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/profiling/profile_common.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'profile_common.pb.dart';

View file

@ -0,0 +1,120 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/profiling/profile_packet.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:fixnum/fixnum.dart' as $fixnum;
import 'package:protobuf/protobuf.dart' as $pb;
class PerfSample extends $pb.GeneratedMessage {
factory PerfSample() => create();
PerfSample._() : super();
factory PerfSample.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory PerfSample.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'PerfSample',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$core.int>(1, _omitFieldNames ? '' : 'cpu', $pb.PbFieldType.OU3)
..a<$core.int>(2, _omitFieldNames ? '' : 'pid', $pb.PbFieldType.OU3)
..a<$core.int>(3, _omitFieldNames ? '' : 'tid', $pb.PbFieldType.OU3)
..a<$fixnum.Int64>(
4, _omitFieldNames ? '' : 'callstackIid', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
PerfSample clone() => PerfSample()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
PerfSample copyWith(void Function(PerfSample) updates) =>
super.copyWith((message) => updates(message as PerfSample)) as PerfSample;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static PerfSample create() => PerfSample._();
PerfSample createEmptyInstance() => create();
static $pb.PbList<PerfSample> createRepeated() => $pb.PbList<PerfSample>();
@$core.pragma('dart2js:noInline')
static PerfSample getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<PerfSample>(create);
static PerfSample? _defaultInstance;
@$pb.TagNumber(1)
$core.int get cpu => $_getIZ(0);
@$pb.TagNumber(1)
set cpu($core.int v) {
$_setUnsignedInt32(0, v);
}
@$pb.TagNumber(1)
$core.bool hasCpu() => $_has(0);
@$pb.TagNumber(1)
void clearCpu() => clearField(1);
@$pb.TagNumber(2)
$core.int get pid => $_getIZ(1);
@$pb.TagNumber(2)
set pid($core.int v) {
$_setUnsignedInt32(1, v);
}
@$pb.TagNumber(2)
$core.bool hasPid() => $_has(1);
@$pb.TagNumber(2)
void clearPid() => clearField(2);
@$pb.TagNumber(3)
$core.int get tid => $_getIZ(2);
@$pb.TagNumber(3)
set tid($core.int v) {
$_setUnsignedInt32(2, v);
}
@$pb.TagNumber(3)
$core.bool hasTid() => $_has(2);
@$pb.TagNumber(3)
void clearTid() => clearField(3);
@$pb.TagNumber(4)
$fixnum.Int64 get callstackIid => $_getI64(3);
@$pb.TagNumber(4)
set callstackIid($fixnum.Int64 v) {
$_setInt64(3, v);
}
@$pb.TagNumber(4)
$core.bool hasCallstackIid() => $_has(3);
@$pb.TagNumber(4)
void clearCallstackIid() => clearField(4);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,38 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/profiling/profile_packet.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use perfSampleDescriptor instead')
const PerfSample$json = {
'1': 'PerfSample',
'2': [
{'1': 'cpu', '3': 1, '4': 1, '5': 13, '10': 'cpu'},
{'1': 'pid', '3': 2, '4': 1, '5': 13, '10': 'pid'},
{'1': 'tid', '3': 3, '4': 1, '5': 13, '10': 'tid'},
{'1': 'callstack_iid', '3': 4, '4': 1, '5': 4, '10': 'callstackIid'},
],
};
/// Descriptor for `PerfSample`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List perfSampleDescriptor = $convert.base64Decode(
'CgpQZXJmU2FtcGxlEhAKA2NwdRgBIAEoDVIDY3B1EhAKA3BpZBgCIAEoDVIDcGlkEhAKA3RpZB'
'gDIAEoDVIDdGlkEiMKDWNhbGxzdGFja19paWQYBCABKARSDGNhbGxzdGFja0lpZA==');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/profiling/profile_packet.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'profile_packet.pb.dart';

View file

@ -0,0 +1,73 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/trace.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
import 'trace_packet.pb.dart' as $10;
class Trace extends $pb.GeneratedMessage {
factory Trace() => create();
Trace._() : super();
factory Trace.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory Trace.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'Trace',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..pc<$10.TracePacket>(
1, _omitFieldNames ? '' : 'packet', $pb.PbFieldType.PM,
subBuilder: $10.TracePacket.create)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
Trace clone() => Trace()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
Trace copyWith(void Function(Trace) updates) =>
super.copyWith((message) => updates(message as Trace)) as Trace;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static Trace create() => Trace._();
Trace createEmptyInstance() => create();
static $pb.PbList<Trace> createRepeated() => $pb.PbList<Trace>();
@$core.pragma('dart2js:noInline')
static Trace getDefault() =>
_defaultInstance ??= $pb.GeneratedMessage.$_defaultFor<Trace>(create);
static Trace? _defaultInstance;
@$pb.TagNumber(1)
$core.List<$10.TracePacket> get packet => $_getList(0);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,42 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/trace.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use traceDescriptor instead')
const Trace$json = {
'1': 'Trace',
'2': [
{
'1': 'packet',
'3': 1,
'4': 3,
'5': 11,
'6': '.perfetto.protos.TracePacket',
'10': 'packet'
},
],
};
/// Descriptor for `Trace`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List traceDescriptor = $convert.base64Decode(
'CgVUcmFjZRI0CgZwYWNrZXQYASADKAsyHC5wZXJmZXR0by5wcm90b3MuVHJhY2VQYWNrZXRSBn'
'BhY2tldA==');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/trace.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'trace.pb.dart';

View file

@ -0,0 +1,247 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/trace_packet.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:fixnum/fixnum.dart' as $fixnum;
import 'package:protobuf/protobuf.dart' as $pb;
import 'clock_snapshot.pb.dart' as $5;
import 'interned_data/interned_data.pb.dart' as $7;
import 'profiling/profile_packet.pb.dart' as $9;
import 'track_event/track_descriptor.pb.dart' as $8;
import 'track_event/track_event.pb.dart' as $6;
export 'trace_packet.pbenum.dart';
enum TracePacket_Data {
clockSnapshot,
trackEvent,
trackDescriptor,
perfSample,
notSet
}
enum TracePacket_OptionalTrustedPacketSequenceId {
trustedPacketSequenceId,
notSet
}
class TracePacket extends $pb.GeneratedMessage {
factory TracePacket() => create();
TracePacket._() : super();
factory TracePacket.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory TracePacket.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static const $core.Map<$core.int, TracePacket_Data> _TracePacket_DataByTag = {
6: TracePacket_Data.clockSnapshot,
11: TracePacket_Data.trackEvent,
60: TracePacket_Data.trackDescriptor,
66: TracePacket_Data.perfSample,
0: TracePacket_Data.notSet
};
static const $core.Map<$core.int, TracePacket_OptionalTrustedPacketSequenceId>
_TracePacket_OptionalTrustedPacketSequenceIdByTag = {
10: TracePacket_OptionalTrustedPacketSequenceId.trustedPacketSequenceId,
0: TracePacket_OptionalTrustedPacketSequenceId.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'TracePacket',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..oo(0, [6, 11, 60, 66])
..oo(1, [10])
..aOM<$5.ClockSnapshot>(6, _omitFieldNames ? '' : 'clockSnapshot',
subBuilder: $5.ClockSnapshot.create)
..a<$fixnum.Int64>(
8, _omitFieldNames ? '' : 'timestamp', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..a<$core.int>(10, _omitFieldNames ? '' : 'trustedPacketSequenceId',
$pb.PbFieldType.OU3)
..aOM<$6.TrackEvent>(11, _omitFieldNames ? '' : 'trackEvent',
subBuilder: $6.TrackEvent.create)
..aOM<$7.InternedData>(12, _omitFieldNames ? '' : 'internedData',
subBuilder: $7.InternedData.create)
..a<$core.int>(
13, _omitFieldNames ? '' : 'sequenceFlags', $pb.PbFieldType.OU3)
..a<$core.int>(
58, _omitFieldNames ? '' : 'timestampClockId', $pb.PbFieldType.OU3)
..aOM<$8.TrackDescriptor>(60, _omitFieldNames ? '' : 'trackDescriptor',
subBuilder: $8.TrackDescriptor.create)
..aOM<$9.PerfSample>(66, _omitFieldNames ? '' : 'perfSample',
subBuilder: $9.PerfSample.create)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
TracePacket clone() => TracePacket()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
TracePacket copyWith(void Function(TracePacket) updates) =>
super.copyWith((message) => updates(message as TracePacket))
as TracePacket;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static TracePacket create() => TracePacket._();
TracePacket createEmptyInstance() => create();
static $pb.PbList<TracePacket> createRepeated() => $pb.PbList<TracePacket>();
@$core.pragma('dart2js:noInline')
static TracePacket getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<TracePacket>(create);
static TracePacket? _defaultInstance;
TracePacket_Data whichData() => _TracePacket_DataByTag[$_whichOneof(0)]!;
void clearData() => clearField($_whichOneof(0));
TracePacket_OptionalTrustedPacketSequenceId
whichOptionalTrustedPacketSequenceId() =>
_TracePacket_OptionalTrustedPacketSequenceIdByTag[$_whichOneof(1)]!;
void clearOptionalTrustedPacketSequenceId() => clearField($_whichOneof(1));
@$pb.TagNumber(6)
$5.ClockSnapshot get clockSnapshot => $_getN(0);
@$pb.TagNumber(6)
set clockSnapshot($5.ClockSnapshot v) {
setField(6, v);
}
@$pb.TagNumber(6)
$core.bool hasClockSnapshot() => $_has(0);
@$pb.TagNumber(6)
void clearClockSnapshot() => clearField(6);
@$pb.TagNumber(6)
$5.ClockSnapshot ensureClockSnapshot() => $_ensure(0);
@$pb.TagNumber(8)
$fixnum.Int64 get timestamp => $_getI64(1);
@$pb.TagNumber(8)
set timestamp($fixnum.Int64 v) {
$_setInt64(1, v);
}
@$pb.TagNumber(8)
$core.bool hasTimestamp() => $_has(1);
@$pb.TagNumber(8)
void clearTimestamp() => clearField(8);
@$pb.TagNumber(10)
$core.int get trustedPacketSequenceId => $_getIZ(2);
@$pb.TagNumber(10)
set trustedPacketSequenceId($core.int v) {
$_setUnsignedInt32(2, v);
}
@$pb.TagNumber(10)
$core.bool hasTrustedPacketSequenceId() => $_has(2);
@$pb.TagNumber(10)
void clearTrustedPacketSequenceId() => clearField(10);
@$pb.TagNumber(11)
$6.TrackEvent get trackEvent => $_getN(3);
@$pb.TagNumber(11)
set trackEvent($6.TrackEvent v) {
setField(11, v);
}
@$pb.TagNumber(11)
$core.bool hasTrackEvent() => $_has(3);
@$pb.TagNumber(11)
void clearTrackEvent() => clearField(11);
@$pb.TagNumber(11)
$6.TrackEvent ensureTrackEvent() => $_ensure(3);
@$pb.TagNumber(12)
$7.InternedData get internedData => $_getN(4);
@$pb.TagNumber(12)
set internedData($7.InternedData v) {
setField(12, v);
}
@$pb.TagNumber(12)
$core.bool hasInternedData() => $_has(4);
@$pb.TagNumber(12)
void clearInternedData() => clearField(12);
@$pb.TagNumber(12)
$7.InternedData ensureInternedData() => $_ensure(4);
@$pb.TagNumber(13)
$core.int get sequenceFlags => $_getIZ(5);
@$pb.TagNumber(13)
set sequenceFlags($core.int v) {
$_setUnsignedInt32(5, v);
}
@$pb.TagNumber(13)
$core.bool hasSequenceFlags() => $_has(5);
@$pb.TagNumber(13)
void clearSequenceFlags() => clearField(13);
@$pb.TagNumber(58)
$core.int get timestampClockId => $_getIZ(6);
@$pb.TagNumber(58)
set timestampClockId($core.int v) {
$_setUnsignedInt32(6, v);
}
@$pb.TagNumber(58)
$core.bool hasTimestampClockId() => $_has(6);
@$pb.TagNumber(58)
void clearTimestampClockId() => clearField(58);
@$pb.TagNumber(60)
$8.TrackDescriptor get trackDescriptor => $_getN(7);
@$pb.TagNumber(60)
set trackDescriptor($8.TrackDescriptor v) {
setField(60, v);
}
@$pb.TagNumber(60)
$core.bool hasTrackDescriptor() => $_has(7);
@$pb.TagNumber(60)
void clearTrackDescriptor() => clearField(60);
@$pb.TagNumber(60)
$8.TrackDescriptor ensureTrackDescriptor() => $_ensure(7);
@$pb.TagNumber(66)
$9.PerfSample get perfSample => $_getN(8);
@$pb.TagNumber(66)
set perfSample($9.PerfSample v) {
setField(66, v);
}
@$pb.TagNumber(66)
$core.bool hasPerfSample() => $_has(8);
@$pb.TagNumber(66)
void clearPerfSample() => clearField(66);
@$pb.TagNumber(66)
$9.PerfSample ensurePerfSample() => $_ensure(8);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,48 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/trace_packet.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class TracePacket_SequenceFlags extends $pb.ProtobufEnum {
static const TracePacket_SequenceFlags SEQ_UNSPECIFIED =
TracePacket_SequenceFlags._(0, _omitEnumNames ? '' : 'SEQ_UNSPECIFIED');
static const TracePacket_SequenceFlags SEQ_INCREMENTAL_STATE_CLEARED =
TracePacket_SequenceFlags._(
1, _omitEnumNames ? '' : 'SEQ_INCREMENTAL_STATE_CLEARED');
static const TracePacket_SequenceFlags SEQ_NEEDS_INCREMENTAL_STATE =
TracePacket_SequenceFlags._(
2, _omitEnumNames ? '' : 'SEQ_NEEDS_INCREMENTAL_STATE');
static const $core.List<TracePacket_SequenceFlags> values =
<TracePacket_SequenceFlags>[
SEQ_UNSPECIFIED,
SEQ_INCREMENTAL_STATE_CLEARED,
SEQ_NEEDS_INCREMENTAL_STATE,
];
static final $core.Map<$core.int, TracePacket_SequenceFlags> _byValue =
$pb.ProtobufEnum.initByValue(values);
static TracePacket_SequenceFlags? valueOf($core.int value) => _byValue[value];
const TracePacket_SequenceFlags._($core.int v, $core.String n) : super(v, n);
}
const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');

View file

@ -0,0 +1,121 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/trace_packet.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use tracePacketDescriptor instead')
const TracePacket$json = {
'1': 'TracePacket',
'2': [
{'1': 'timestamp', '3': 8, '4': 1, '5': 4, '10': 'timestamp'},
{
'1': 'timestamp_clock_id',
'3': 58,
'4': 1,
'5': 13,
'10': 'timestampClockId'
},
{
'1': 'clock_snapshot',
'3': 6,
'4': 1,
'5': 11,
'6': '.perfetto.protos.ClockSnapshot',
'9': 0,
'10': 'clockSnapshot'
},
{
'1': 'track_event',
'3': 11,
'4': 1,
'5': 11,
'6': '.perfetto.protos.TrackEvent',
'9': 0,
'10': 'trackEvent'
},
{
'1': 'track_descriptor',
'3': 60,
'4': 1,
'5': 11,
'6': '.perfetto.protos.TrackDescriptor',
'9': 0,
'10': 'trackDescriptor'
},
{
'1': 'perf_sample',
'3': 66,
'4': 1,
'5': 11,
'6': '.perfetto.protos.PerfSample',
'9': 0,
'10': 'perfSample'
},
{
'1': 'trusted_packet_sequence_id',
'3': 10,
'4': 1,
'5': 13,
'9': 1,
'10': 'trustedPacketSequenceId'
},
{
'1': 'interned_data',
'3': 12,
'4': 1,
'5': 11,
'6': '.perfetto.protos.InternedData',
'10': 'internedData'
},
{'1': 'sequence_flags', '3': 13, '4': 1, '5': 13, '10': 'sequenceFlags'},
],
'4': [TracePacket_SequenceFlags$json],
'8': [
{'1': 'data'},
{'1': 'optional_trusted_packet_sequence_id'},
],
};
@$core.Deprecated('Use tracePacketDescriptor instead')
const TracePacket_SequenceFlags$json = {
'1': 'SequenceFlags',
'2': [
{'1': 'SEQ_UNSPECIFIED', '2': 0},
{'1': 'SEQ_INCREMENTAL_STATE_CLEARED', '2': 1},
{'1': 'SEQ_NEEDS_INCREMENTAL_STATE', '2': 2},
],
};
/// Descriptor for `TracePacket`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List tracePacketDescriptor = $convert.base64Decode(
'CgtUcmFjZVBhY2tldBIcCgl0aW1lc3RhbXAYCCABKARSCXRpbWVzdGFtcBIsChJ0aW1lc3RhbX'
'BfY2xvY2tfaWQYOiABKA1SEHRpbWVzdGFtcENsb2NrSWQSRwoOY2xvY2tfc25hcHNob3QYBiAB'
'KAsyHi5wZXJmZXR0by5wcm90b3MuQ2xvY2tTbmFwc2hvdEgAUg1jbG9ja1NuYXBzaG90Ej4KC3'
'RyYWNrX2V2ZW50GAsgASgLMhsucGVyZmV0dG8ucHJvdG9zLlRyYWNrRXZlbnRIAFIKdHJhY2tF'
'dmVudBJNChB0cmFja19kZXNjcmlwdG9yGDwgASgLMiAucGVyZmV0dG8ucHJvdG9zLlRyYWNrRG'
'VzY3JpcHRvckgAUg90cmFja0Rlc2NyaXB0b3ISPgoLcGVyZl9zYW1wbGUYQiABKAsyGy5wZXJm'
'ZXR0by5wcm90b3MuUGVyZlNhbXBsZUgAUgpwZXJmU2FtcGxlEj0KGnRydXN0ZWRfcGFja2V0X3'
'NlcXVlbmNlX2lkGAogASgNSAFSF3RydXN0ZWRQYWNrZXRTZXF1ZW5jZUlkEkIKDWludGVybmVk'
'X2RhdGEYDCABKAsyHS5wZXJmZXR0by5wcm90b3MuSW50ZXJuZWREYXRhUgxpbnRlcm5lZERhdG'
'ESJQoOc2VxdWVuY2VfZmxhZ3MYDSABKA1SDXNlcXVlbmNlRmxhZ3MiaAoNU2VxdWVuY2VGbGFn'
'cxITCg9TRVFfVU5TUEVDSUZJRUQQABIhCh1TRVFfSU5DUkVNRU5UQUxfU1RBVEVfQ0xFQVJFRB'
'ABEh8KG1NFUV9ORUVEU19JTkNSRU1FTlRBTF9TVEFURRACQgYKBGRhdGFCJQojb3B0aW9uYWxf'
'dHJ1c3RlZF9wYWNrZXRfc2VxdWVuY2VfaWQ=');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/trace_packet.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'trace_packet.pb.dart';

View file

@ -0,0 +1,131 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/debug_annotation.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
enum DebugAnnotation_NameField { name, notSet }
enum DebugAnnotation_Value { stringValue, legacyJsonValue, notSet }
class DebugAnnotation extends $pb.GeneratedMessage {
factory DebugAnnotation() => create();
DebugAnnotation._() : super();
factory DebugAnnotation.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory DebugAnnotation.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static const $core.Map<$core.int, DebugAnnotation_NameField>
_DebugAnnotation_NameFieldByTag = {
10: DebugAnnotation_NameField.name,
0: DebugAnnotation_NameField.notSet
};
static const $core.Map<$core.int, DebugAnnotation_Value>
_DebugAnnotation_ValueByTag = {
6: DebugAnnotation_Value.stringValue,
9: DebugAnnotation_Value.legacyJsonValue,
0: DebugAnnotation_Value.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'DebugAnnotation',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..oo(0, [10])
..oo(1, [6, 9])
..aOS(6, _omitFieldNames ? '' : 'stringValue')
..aOS(9, _omitFieldNames ? '' : 'legacyJsonValue')
..aOS(10, _omitFieldNames ? '' : 'name')
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
DebugAnnotation clone() => DebugAnnotation()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
DebugAnnotation copyWith(void Function(DebugAnnotation) updates) =>
super.copyWith((message) => updates(message as DebugAnnotation))
as DebugAnnotation;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static DebugAnnotation create() => DebugAnnotation._();
DebugAnnotation createEmptyInstance() => create();
static $pb.PbList<DebugAnnotation> createRepeated() =>
$pb.PbList<DebugAnnotation>();
@$core.pragma('dart2js:noInline')
static DebugAnnotation getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<DebugAnnotation>(create);
static DebugAnnotation? _defaultInstance;
DebugAnnotation_NameField whichNameField() =>
_DebugAnnotation_NameFieldByTag[$_whichOneof(0)]!;
void clearNameField() => clearField($_whichOneof(0));
DebugAnnotation_Value whichValue() =>
_DebugAnnotation_ValueByTag[$_whichOneof(1)]!;
void clearValue() => clearField($_whichOneof(1));
@$pb.TagNumber(6)
$core.String get stringValue => $_getSZ(0);
@$pb.TagNumber(6)
set stringValue($core.String v) {
$_setString(0, v);
}
@$pb.TagNumber(6)
$core.bool hasStringValue() => $_has(0);
@$pb.TagNumber(6)
void clearStringValue() => clearField(6);
@$pb.TagNumber(9)
$core.String get legacyJsonValue => $_getSZ(1);
@$pb.TagNumber(9)
set legacyJsonValue($core.String v) {
$_setString(1, v);
}
@$pb.TagNumber(9)
$core.bool hasLegacyJsonValue() => $_has(1);
@$pb.TagNumber(9)
void clearLegacyJsonValue() => clearField(9);
@$pb.TagNumber(10)
$core.String get name => $_getSZ(2);
@$pb.TagNumber(10)
set name($core.String v) {
$_setString(2, v);
}
@$pb.TagNumber(10)
$core.bool hasName() => $_has(2);
@$pb.TagNumber(10)
void clearName() => clearField(10);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,49 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/debug_annotation.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use debugAnnotationDescriptor instead')
const DebugAnnotation$json = {
'1': 'DebugAnnotation',
'2': [
{'1': 'name', '3': 10, '4': 1, '5': 9, '9': 0, '10': 'name'},
{'1': 'string_value', '3': 6, '4': 1, '5': 9, '9': 1, '10': 'stringValue'},
{
'1': 'legacy_json_value',
'3': 9,
'4': 1,
'5': 9,
'9': 1,
'10': 'legacyJsonValue'
},
],
'8': [
{'1': 'name_field'},
{'1': 'value'},
],
};
/// Descriptor for `DebugAnnotation`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List debugAnnotationDescriptor = $convert.base64Decode(
'Cg9EZWJ1Z0Fubm90YXRpb24SFAoEbmFtZRgKIAEoCUgAUgRuYW1lEiMKDHN0cmluZ192YWx1ZR'
'gGIAEoCUgBUgtzdHJpbmdWYWx1ZRIsChFsZWdhY3lfanNvbl92YWx1ZRgJIAEoCUgBUg9sZWdh'
'Y3lKc29uVmFsdWVCDAoKbmFtZV9maWVsZEIHCgV2YWx1ZQ==');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/debug_annotation.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'debug_annotation.pb.dart';

View file

@ -0,0 +1,93 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/process_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class ProcessDescriptor extends $pb.GeneratedMessage {
factory ProcessDescriptor() => create();
ProcessDescriptor._() : super();
factory ProcessDescriptor.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory ProcessDescriptor.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'ProcessDescriptor',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$core.int>(1, _omitFieldNames ? '' : 'pid', $pb.PbFieldType.O3)
..aOS(6, _omitFieldNames ? '' : 'processName')
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
ProcessDescriptor clone() => ProcessDescriptor()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
ProcessDescriptor copyWith(void Function(ProcessDescriptor) updates) =>
super.copyWith((message) => updates(message as ProcessDescriptor))
as ProcessDescriptor;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ProcessDescriptor create() => ProcessDescriptor._();
ProcessDescriptor createEmptyInstance() => create();
static $pb.PbList<ProcessDescriptor> createRepeated() =>
$pb.PbList<ProcessDescriptor>();
@$core.pragma('dart2js:noInline')
static ProcessDescriptor getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<ProcessDescriptor>(create);
static ProcessDescriptor? _defaultInstance;
@$pb.TagNumber(1)
$core.int get pid => $_getIZ(0);
@$pb.TagNumber(1)
set pid($core.int v) {
$_setSignedInt32(0, v);
}
@$pb.TagNumber(1)
$core.bool hasPid() => $_has(0);
@$pb.TagNumber(1)
void clearPid() => clearField(1);
@$pb.TagNumber(6)
$core.String get processName => $_getSZ(1);
@$pb.TagNumber(6)
set processName($core.String v) {
$_setString(1, v);
}
@$pb.TagNumber(6)
$core.bool hasProcessName() => $_has(1);
@$pb.TagNumber(6)
void clearProcessName() => clearField(6);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,36 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/process_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use processDescriptorDescriptor instead')
const ProcessDescriptor$json = {
'1': 'ProcessDescriptor',
'2': [
{'1': 'pid', '3': 1, '4': 1, '5': 5, '10': 'pid'},
{'1': 'process_name', '3': 6, '4': 1, '5': 9, '10': 'processName'},
],
};
/// Descriptor for `ProcessDescriptor`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List processDescriptorDescriptor = $convert.base64Decode(
'ChFQcm9jZXNzRGVzY3JpcHRvchIQCgNwaWQYASABKAVSA3BpZBIhCgxwcm9jZXNzX25hbWUYBi'
'ABKAlSC3Byb2Nlc3NOYW1l');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/process_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'process_descriptor.pb.dart';

View file

@ -0,0 +1,106 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/thread_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class ThreadDescriptor extends $pb.GeneratedMessage {
factory ThreadDescriptor() => create();
ThreadDescriptor._() : super();
factory ThreadDescriptor.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory ThreadDescriptor.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'ThreadDescriptor',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$core.int>(1, _omitFieldNames ? '' : 'pid', $pb.PbFieldType.O3)
..a<$core.int>(2, _omitFieldNames ? '' : 'tid', $pb.PbFieldType.O3)
..aOS(5, _omitFieldNames ? '' : 'threadName')
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
ThreadDescriptor clone() => ThreadDescriptor()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
ThreadDescriptor copyWith(void Function(ThreadDescriptor) updates) =>
super.copyWith((message) => updates(message as ThreadDescriptor))
as ThreadDescriptor;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static ThreadDescriptor create() => ThreadDescriptor._();
ThreadDescriptor createEmptyInstance() => create();
static $pb.PbList<ThreadDescriptor> createRepeated() =>
$pb.PbList<ThreadDescriptor>();
@$core.pragma('dart2js:noInline')
static ThreadDescriptor getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<ThreadDescriptor>(create);
static ThreadDescriptor? _defaultInstance;
@$pb.TagNumber(1)
$core.int get pid => $_getIZ(0);
@$pb.TagNumber(1)
set pid($core.int v) {
$_setSignedInt32(0, v);
}
@$pb.TagNumber(1)
$core.bool hasPid() => $_has(0);
@$pb.TagNumber(1)
void clearPid() => clearField(1);
@$pb.TagNumber(2)
$core.int get tid => $_getIZ(1);
@$pb.TagNumber(2)
set tid($core.int v) {
$_setSignedInt32(1, v);
}
@$pb.TagNumber(2)
$core.bool hasTid() => $_has(1);
@$pb.TagNumber(2)
void clearTid() => clearField(2);
@$pb.TagNumber(5)
$core.String get threadName => $_getSZ(2);
@$pb.TagNumber(5)
set threadName($core.String v) {
$_setString(2, v);
}
@$pb.TagNumber(5)
$core.bool hasThreadName() => $_has(2);
@$pb.TagNumber(5)
void clearThreadName() => clearField(5);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,37 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/thread_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use threadDescriptorDescriptor instead')
const ThreadDescriptor$json = {
'1': 'ThreadDescriptor',
'2': [
{'1': 'pid', '3': 1, '4': 1, '5': 5, '10': 'pid'},
{'1': 'tid', '3': 2, '4': 1, '5': 5, '10': 'tid'},
{'1': 'thread_name', '3': 5, '4': 1, '5': 9, '10': 'threadName'},
],
};
/// Descriptor for `ThreadDescriptor`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List threadDescriptorDescriptor = $convert.base64Decode(
'ChBUaHJlYWREZXNjcmlwdG9yEhAKA3BpZBgBIAEoBVIDcGlkEhAKA3RpZBgCIAEoBVIDdGlkEh'
'8KC3RocmVhZF9uYW1lGAUgASgJUgp0aHJlYWROYW1l');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/thread_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'thread_descriptor.pb.dart';

View file

@ -0,0 +1,145 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/track_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:fixnum/fixnum.dart' as $fixnum;
import 'package:protobuf/protobuf.dart' as $pb;
import 'process_descriptor.pb.dart' as $3;
import 'thread_descriptor.pb.dart' as $4;
class TrackDescriptor extends $pb.GeneratedMessage {
factory TrackDescriptor() => create();
TrackDescriptor._() : super();
factory TrackDescriptor.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory TrackDescriptor.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'TrackDescriptor',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..a<$fixnum.Int64>(1, _omitFieldNames ? '' : 'uuid', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..aOS(2, _omitFieldNames ? '' : 'name')
..aOM<$3.ProcessDescriptor>(3, _omitFieldNames ? '' : 'process',
subBuilder: $3.ProcessDescriptor.create)
..aOM<$4.ThreadDescriptor>(4, _omitFieldNames ? '' : 'thread',
subBuilder: $4.ThreadDescriptor.create)
..a<$fixnum.Int64>(
5, _omitFieldNames ? '' : 'parentUuid', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
TrackDescriptor clone() => TrackDescriptor()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
TrackDescriptor copyWith(void Function(TrackDescriptor) updates) =>
super.copyWith((message) => updates(message as TrackDescriptor))
as TrackDescriptor;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static TrackDescriptor create() => TrackDescriptor._();
TrackDescriptor createEmptyInstance() => create();
static $pb.PbList<TrackDescriptor> createRepeated() =>
$pb.PbList<TrackDescriptor>();
@$core.pragma('dart2js:noInline')
static TrackDescriptor getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<TrackDescriptor>(create);
static TrackDescriptor? _defaultInstance;
@$pb.TagNumber(1)
$fixnum.Int64 get uuid => $_getI64(0);
@$pb.TagNumber(1)
set uuid($fixnum.Int64 v) {
$_setInt64(0, v);
}
@$pb.TagNumber(1)
$core.bool hasUuid() => $_has(0);
@$pb.TagNumber(1)
void clearUuid() => clearField(1);
@$pb.TagNumber(2)
$core.String get name => $_getSZ(1);
@$pb.TagNumber(2)
set name($core.String v) {
$_setString(1, v);
}
@$pb.TagNumber(2)
$core.bool hasName() => $_has(1);
@$pb.TagNumber(2)
void clearName() => clearField(2);
@$pb.TagNumber(3)
$3.ProcessDescriptor get process => $_getN(2);
@$pb.TagNumber(3)
set process($3.ProcessDescriptor v) {
setField(3, v);
}
@$pb.TagNumber(3)
$core.bool hasProcess() => $_has(2);
@$pb.TagNumber(3)
void clearProcess() => clearField(3);
@$pb.TagNumber(3)
$3.ProcessDescriptor ensureProcess() => $_ensure(2);
@$pb.TagNumber(4)
$4.ThreadDescriptor get thread => $_getN(3);
@$pb.TagNumber(4)
set thread($4.ThreadDescriptor v) {
setField(4, v);
}
@$pb.TagNumber(4)
$core.bool hasThread() => $_has(3);
@$pb.TagNumber(4)
void clearThread() => clearField(4);
@$pb.TagNumber(4)
$4.ThreadDescriptor ensureThread() => $_ensure(3);
@$pb.TagNumber(5)
$fixnum.Int64 get parentUuid => $_getI64(4);
@$pb.TagNumber(5)
set parentUuid($fixnum.Int64 v) {
$_setInt64(4, v);
}
@$pb.TagNumber(5)
$core.bool hasParentUuid() => $_has(4);
@$pb.TagNumber(5)
void clearParentUuid() => clearField(5);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,55 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/track_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use trackDescriptorDescriptor instead')
const TrackDescriptor$json = {
'1': 'TrackDescriptor',
'2': [
{'1': 'uuid', '3': 1, '4': 1, '5': 4, '10': 'uuid'},
{'1': 'parent_uuid', '3': 5, '4': 1, '5': 4, '10': 'parentUuid'},
{'1': 'name', '3': 2, '4': 1, '5': 9, '10': 'name'},
{
'1': 'process',
'3': 3,
'4': 1,
'5': 11,
'6': '.perfetto.protos.ProcessDescriptor',
'10': 'process'
},
{
'1': 'thread',
'3': 4,
'4': 1,
'5': 11,
'6': '.perfetto.protos.ThreadDescriptor',
'10': 'thread'
},
],
};
/// Descriptor for `TrackDescriptor`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List trackDescriptorDescriptor = $convert.base64Decode(
'Cg9UcmFja0Rlc2NyaXB0b3ISEgoEdXVpZBgBIAEoBFIEdXVpZBIfCgtwYXJlbnRfdXVpZBgFIA'
'EoBFIKcGFyZW50VXVpZBISCgRuYW1lGAIgASgJUgRuYW1lEjwKB3Byb2Nlc3MYAyABKAsyIi5w'
'ZXJmZXR0by5wcm90b3MuUHJvY2Vzc0Rlc2NyaXB0b3JSB3Byb2Nlc3MSOQoGdGhyZWFkGAQgAS'
'gLMiEucGVyZmV0dG8ucHJvdG9zLlRocmVhZERlc2NyaXB0b3JSBnRocmVhZA==');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/track_descriptor.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'track_descriptor.pb.dart';

View file

@ -0,0 +1,147 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/track_event.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:fixnum/fixnum.dart' as $fixnum;
import 'package:protobuf/protobuf.dart' as $pb;
import 'debug_annotation.pb.dart' as $1;
import 'track_event.pbenum.dart';
export 'track_event.pbenum.dart';
enum TrackEvent_NameField { name, notSet }
class TrackEvent extends $pb.GeneratedMessage {
factory TrackEvent() => create();
TrackEvent._() : super();
factory TrackEvent.fromBuffer($core.List<$core.int> i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromBuffer(i, r);
factory TrackEvent.fromJson($core.String i,
[$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) =>
create()..mergeFromJson(i, r);
static const $core.Map<$core.int, TrackEvent_NameField>
_TrackEvent_NameFieldByTag = {
23: TrackEvent_NameField.name,
0: TrackEvent_NameField.notSet
};
static final $pb.BuilderInfo _i = $pb.BuilderInfo(
_omitMessageNames ? '' : 'TrackEvent',
package:
const $pb.PackageName(_omitMessageNames ? '' : 'perfetto.protos'),
createEmptyInstance: create)
..oo(0, [23])
..pc<$1.DebugAnnotation>(
4, _omitFieldNames ? '' : 'debugAnnotations', $pb.PbFieldType.PM,
subBuilder: $1.DebugAnnotation.create)
..e<TrackEvent_Type>(9, _omitFieldNames ? '' : 'type', $pb.PbFieldType.OE,
defaultOrMaker: TrackEvent_Type.TYPE_SLICE_BEGIN,
valueOf: TrackEvent_Type.valueOf,
enumValues: TrackEvent_Type.values)
..a<$fixnum.Int64>(
11, _omitFieldNames ? '' : 'trackUuid', $pb.PbFieldType.OU6,
defaultOrMaker: $fixnum.Int64.ZERO)
..pPS(22, _omitFieldNames ? '' : 'categories')
..aOS(23, _omitFieldNames ? '' : 'name')
..p<$fixnum.Int64>(
47, _omitFieldNames ? '' : 'flowIds', $pb.PbFieldType.PF6)
..p<$fixnum.Int64>(
48, _omitFieldNames ? '' : 'terminatingFlowIds', $pb.PbFieldType.PF6)
..hasRequiredFields = false;
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.deepCopy] instead. '
'Will be removed in next major version')
TrackEvent clone() => TrackEvent()..mergeFromMessage(this);
@$core.Deprecated('Using this can add significant overhead to your binary. '
'Use [GeneratedMessageGenericExtensions.rebuild] instead. '
'Will be removed in next major version')
TrackEvent copyWith(void Function(TrackEvent) updates) =>
super.copyWith((message) => updates(message as TrackEvent)) as TrackEvent;
$pb.BuilderInfo get info_ => _i;
@$core.pragma('dart2js:noInline')
static TrackEvent create() => TrackEvent._();
TrackEvent createEmptyInstance() => create();
static $pb.PbList<TrackEvent> createRepeated() => $pb.PbList<TrackEvent>();
@$core.pragma('dart2js:noInline')
static TrackEvent getDefault() => _defaultInstance ??=
$pb.GeneratedMessage.$_defaultFor<TrackEvent>(create);
static TrackEvent? _defaultInstance;
TrackEvent_NameField whichNameField() =>
_TrackEvent_NameFieldByTag[$_whichOneof(0)]!;
void clearNameField() => clearField($_whichOneof(0));
@$pb.TagNumber(4)
$core.List<$1.DebugAnnotation> get debugAnnotations => $_getList(0);
@$pb.TagNumber(9)
TrackEvent_Type get type => $_getN(1);
@$pb.TagNumber(9)
set type(TrackEvent_Type v) {
setField(9, v);
}
@$pb.TagNumber(9)
$core.bool hasType() => $_has(1);
@$pb.TagNumber(9)
void clearType() => clearField(9);
@$pb.TagNumber(11)
$fixnum.Int64 get trackUuid => $_getI64(2);
@$pb.TagNumber(11)
set trackUuid($fixnum.Int64 v) {
$_setInt64(2, v);
}
@$pb.TagNumber(11)
$core.bool hasTrackUuid() => $_has(2);
@$pb.TagNumber(11)
void clearTrackUuid() => clearField(11);
@$pb.TagNumber(22)
$core.List<$core.String> get categories => $_getList(3);
@$pb.TagNumber(23)
$core.String get name => $_getSZ(4);
@$pb.TagNumber(23)
set name($core.String v) {
$_setString(4, v);
}
@$pb.TagNumber(23)
$core.bool hasName() => $_has(4);
@$pb.TagNumber(23)
void clearName() => clearField(23);
@$pb.TagNumber(47)
$core.List<$fixnum.Int64> get flowIds => $_getList(5);
@$pb.TagNumber(48)
$core.List<$fixnum.Int64> get terminatingFlowIds => $_getList(6);
}
const _omitFieldNames = $core.bool.fromEnvironment('protobuf.omit_field_names');
const _omitMessageNames =
$core.bool.fromEnvironment('protobuf.omit_message_names');

View file

@ -0,0 +1,45 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/track_event.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:core' as $core;
import 'package:protobuf/protobuf.dart' as $pb;
class TrackEvent_Type extends $pb.ProtobufEnum {
static const TrackEvent_Type TYPE_SLICE_BEGIN =
TrackEvent_Type._(1, _omitEnumNames ? '' : 'TYPE_SLICE_BEGIN');
static const TrackEvent_Type TYPE_SLICE_END =
TrackEvent_Type._(2, _omitEnumNames ? '' : 'TYPE_SLICE_END');
static const TrackEvent_Type TYPE_INSTANT =
TrackEvent_Type._(3, _omitEnumNames ? '' : 'TYPE_INSTANT');
static const $core.List<TrackEvent_Type> values = <TrackEvent_Type>[
TYPE_SLICE_BEGIN,
TYPE_SLICE_END,
TYPE_INSTANT,
];
static final $core.Map<$core.int, TrackEvent_Type> _byValue =
$pb.ProtobufEnum.initByValue(values);
static TrackEvent_Type? valueOf($core.int value) => _byValue[value];
const TrackEvent_Type._($core.int v, $core.String n) : super(v, n);
}
const _omitEnumNames = $core.bool.fromEnvironment('protobuf.omit_enum_names');

View file

@ -0,0 +1,81 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/track_event.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
import 'dart:convert' as $convert;
import 'dart:core' as $core;
import 'dart:typed_data' as $typed_data;
@$core.Deprecated('Use trackEventDescriptor instead')
const TrackEvent$json = {
'1': 'TrackEvent',
'2': [
{'1': 'categories', '3': 22, '4': 3, '5': 9, '10': 'categories'},
{'1': 'name', '3': 23, '4': 1, '5': 9, '9': 0, '10': 'name'},
{
'1': 'type',
'3': 9,
'4': 1,
'5': 14,
'6': '.perfetto.protos.TrackEvent.Type',
'10': 'type'
},
{'1': 'track_uuid', '3': 11, '4': 1, '5': 4, '10': 'trackUuid'},
{'1': 'flow_ids', '3': 47, '4': 3, '5': 6, '10': 'flowIds'},
{
'1': 'terminating_flow_ids',
'3': 48,
'4': 3,
'5': 6,
'10': 'terminatingFlowIds'
},
{
'1': 'debug_annotations',
'3': 4,
'4': 3,
'5': 11,
'6': '.perfetto.protos.DebugAnnotation',
'10': 'debugAnnotations'
},
],
'4': [TrackEvent_Type$json],
'8': [
{'1': 'name_field'},
],
};
@$core.Deprecated('Use trackEventDescriptor instead')
const TrackEvent_Type$json = {
'1': 'Type',
'2': [
{'1': 'TYPE_SLICE_BEGIN', '2': 1},
{'1': 'TYPE_SLICE_END', '2': 2},
{'1': 'TYPE_INSTANT', '2': 3},
],
};
/// Descriptor for `TrackEvent`. Decode as a `google.protobuf.DescriptorProto`.
final $typed_data.Uint8List trackEventDescriptor = $convert.base64Decode(
'CgpUcmFja0V2ZW50Eh4KCmNhdGVnb3JpZXMYFiADKAlSCmNhdGVnb3JpZXMSFAoEbmFtZRgXIA'
'EoCUgAUgRuYW1lEjQKBHR5cGUYCSABKA4yIC5wZXJmZXR0by5wcm90b3MuVHJhY2tFdmVudC5U'
'eXBlUgR0eXBlEh0KCnRyYWNrX3V1aWQYCyABKARSCXRyYWNrVXVpZBIZCghmbG93X2lkcxgvIA'
'MoBlIHZmxvd0lkcxIwChR0ZXJtaW5hdGluZ19mbG93X2lkcxgwIAMoBlISdGVybWluYXRpbmdG'
'bG93SWRzEk0KEWRlYnVnX2Fubm90YXRpb25zGAQgAygLMiAucGVyZmV0dG8ucHJvdG9zLkRlYn'
'VnQW5ub3RhdGlvblIQZGVidWdBbm5vdGF0aW9ucyJCCgRUeXBlEhQKEFRZUEVfU0xJQ0VfQkVH'
'SU4QARISCg5UWVBFX1NMSUNFX0VORBACEhAKDFRZUEVfSU5TVEFOVBADQgwKCm5hbWVfZmllbG'
'Q=');

View file

@ -0,0 +1,21 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
//
// Generated code. Do not modify.
// source: protos/perfetto/trace/track_event/track_event.proto
//
// @dart = 2.12
// ignore_for_file: annotate_overrides, camel_case_types
// ignore_for_file: constant_identifier_names
// ignore_for_file: deprecated_member_use_from_same_package, library_prefixes
// ignore_for_file: non_constant_identifier_names, prefer_final_fields
// ignore_for_file: unnecessary_import, unnecessary_this, unused_import
export 'track_event.pb.dart';

View file

@ -0,0 +1,48 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
export 'src/protos/perfetto/common/builtin_clock.pb.dart';
export 'src/protos/perfetto/common/builtin_clock.pbenum.dart';
export 'src/protos/perfetto/common/builtin_clock.pbjson.dart';
export 'src/protos/perfetto/common/builtin_clock.pbserver.dart';
export 'src/protos/perfetto/trace/clock_snapshot.pb.dart';
export 'src/protos/perfetto/trace/clock_snapshot.pbjson.dart';
export 'src/protos/perfetto/trace/clock_snapshot.pbserver.dart';
export 'src/protos/perfetto/trace/interned_data/interned_data.pb.dart';
export 'src/protos/perfetto/trace/interned_data/interned_data.pbjson.dart';
export 'src/protos/perfetto/trace/interned_data/interned_data.pbserver.dart';
export 'src/protos/perfetto/trace/profiling/profile_common.pb.dart';
export 'src/protos/perfetto/trace/profiling/profile_common.pbjson.dart';
export 'src/protos/perfetto/trace/profiling/profile_common.pbserver.dart';
export 'src/protos/perfetto/trace/profiling/profile_packet.pb.dart';
export 'src/protos/perfetto/trace/profiling/profile_packet.pbjson.dart';
export 'src/protos/perfetto/trace/profiling/profile_packet.pbserver.dart';
export 'src/protos/perfetto/trace/trace.pb.dart';
export 'src/protos/perfetto/trace/trace.pbjson.dart';
export 'src/protos/perfetto/trace/trace.pbserver.dart';
export 'src/protos/perfetto/trace/trace_packet.pb.dart';
export 'src/protos/perfetto/trace/trace_packet.pbenum.dart';
export 'src/protos/perfetto/trace/trace_packet.pbjson.dart';
export 'src/protos/perfetto/trace/trace_packet.pbserver.dart';
export 'src/protos/perfetto/trace/track_event/debug_annotation.pb.dart';
export 'src/protos/perfetto/trace/track_event/debug_annotation.pbjson.dart';
export 'src/protos/perfetto/trace/track_event/debug_annotation.pbserver.dart';
export 'src/protos/perfetto/trace/track_event/process_descriptor.pb.dart';
export 'src/protos/perfetto/trace/track_event/process_descriptor.pbjson.dart';
export 'src/protos/perfetto/trace/track_event/process_descriptor.pbserver.dart';
export 'src/protos/perfetto/trace/track_event/thread_descriptor.pb.dart';
export 'src/protos/perfetto/trace/track_event/thread_descriptor.pbjson.dart';
export 'src/protos/perfetto/trace/track_event/thread_descriptor.pbserver.dart';
export 'src/protos/perfetto/trace/track_event/track_descriptor.pb.dart';
export 'src/protos/perfetto/trace/track_event/track_descriptor.pbjson.dart';
export 'src/protos/perfetto/trace/track_event/track_descriptor.pbserver.dart';
export 'src/protos/perfetto/trace/track_event/track_event.pb.dart';
export 'src/protos/perfetto/trace/track_event/track_event.pbenum.dart';
export 'src/protos/perfetto/trace/track_event/track_event.pbjson.dart';
export 'src/protos/perfetto/trace/track_event/track_event.pbserver.dart';

View file

@ -0,0 +1,21 @@
name: vm_service_protos
version: 1.0.0
description: >-
A library for decoding protos returned by a service implementing the Dart VM
service protocol.
repository: https://github.com/dart-lang/sdk/tree/main/pkg/vm_service_protos
environment:
sdk: '>=2.19.0 <4.0.0'
dependencies:
fixnum: ^1.0.0
protobuf: ^3.0.0
# We use 'any' version constraints here as we get our package versions from
# the dart-lang/sdk repo's DEPS file. Note that this is a special case; the
# best practice for packages is to specify their compatible version ranges.
# See also https://dart.dev/tools/pub/dependencies.
dev_dependencies:
lints: any

View file

@ -107,25 +107,41 @@ template("protozero_library") {
}
}
_perfetto_proto_definition_sources = [
"protos/perfetto/common/builtin_clock.proto",
"protos/perfetto/trace/clock_snapshot.proto",
"protos/perfetto/trace/interned_data/interned_data.proto",
"protos/perfetto/trace/profiling/profile_common.proto",
"protos/perfetto/trace/profiling/profile_packet.proto",
"protos/perfetto/trace/trace.proto",
"protos/perfetto/trace/trace_packet.proto",
"protos/perfetto/trace/track_event/debug_annotation.proto",
"protos/perfetto/trace/track_event/process_descriptor.proto",
"protos/perfetto/trace/track_event/thread_descriptor.proto",
"protos/perfetto/trace/track_event/track_descriptor.proto",
"protos/perfetto/trace/track_event/track_event.proto",
]
# This target is not a dependency of any other GN target. It is required to make
# ./protos/tools/compile_perfetto_protos.dart work though.
protozero_library("perfetto_protos") {
protozero_library("perfetto_protos_protozero") {
proto_in_dir = "."
proto_out_dir = "//runtime/vm"
generator_plugin_options = "wrapper_namespace=pbzero"
sources = [
"protos/perfetto/common/builtin_clock.proto",
"protos/perfetto/trace/clock_snapshot.proto",
"protos/perfetto/trace/interned_data/interned_data.proto",
"protos/perfetto/trace/profiling/profile_common.proto",
"protos/perfetto/trace/profiling/profile_packet.proto",
"protos/perfetto/trace/trace_packet.proto",
"protos/perfetto/trace/track_event/debug_annotation.proto",
"protos/perfetto/trace/track_event/process_descriptor.proto",
"protos/perfetto/trace/track_event/thread_descriptor.proto",
"protos/perfetto/trace/track_event/track_descriptor.proto",
"protos/perfetto/trace/track_event/track_event.proto",
]
sources = _perfetto_proto_definition_sources
}
proto_library("perfetto_protos_dart") {
generate_cc = false
generate_python = false
generator_plugin_script =
"//third_party/pkg/protobuf/protoc_plugin/bin/protoc-gen-dart"
generator_plugin_suffixes = [ ".pb.dart" ]
proto_in_dir = "."
proto_out_dir = "//pkg/vm_service_protos/lib/src"
sources = _perfetto_proto_definition_sources
}
# This config needs to be propagated to all targets that depend on

View file

@ -0,0 +1,78 @@
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
// Autogenerated by the ProtoZero compiler plugin. DO NOT EDIT.
#ifndef PERFETTO_PROTOS_PROTOS_PERFETTO_TRACE_TRACE_PROTO_H_
#define PERFETTO_PROTOS_PROTOS_PERFETTO_TRACE_TRACE_PROTO_H_
#include <stddef.h>
#include <stdint.h>
#include "perfetto/protozero/field_writer.h"
#include "perfetto/protozero/message.h"
#include "perfetto/protozero/packed_repeated_fields.h"
#include "perfetto/protozero/proto_decoder.h"
#include "perfetto/protozero/proto_utils.h"
namespace perfetto {
namespace protos {
namespace pbzero {
class TracePacket;
class Trace_Decoder : public ::protozero::TypedProtoDecoder<
/*MAX_FIELD_ID=*/1,
/*HAS_NONPACKED_REPEATED_FIELDS=*/true> {
public:
Trace_Decoder(const uint8_t* data, size_t len)
: TypedProtoDecoder(data, len) {}
explicit Trace_Decoder(const std::string& raw)
: TypedProtoDecoder(reinterpret_cast<const uint8_t*>(raw.data()),
raw.size()) {}
explicit Trace_Decoder(const ::protozero::ConstBytes& raw)
: TypedProtoDecoder(raw.data, raw.size) {}
bool has_packet() const { return at<1>().valid(); }
::protozero::RepeatedFieldIterator<::protozero::ConstBytes> packet() const {
return GetRepeated<::protozero::ConstBytes>(1);
}
};
class Trace : public ::protozero::Message {
public:
using Decoder = Trace_Decoder;
enum : int32_t {
kPacketFieldNumber = 1,
};
static constexpr const char* GetName() { return ".perfetto.protos.Trace"; }
using FieldMetadata_Packet = ::protozero::proto_utils::FieldMetadata<
1,
::protozero::proto_utils::RepetitionType::kRepeatedNotPacked,
::protozero::proto_utils::ProtoSchemaType::kMessage,
TracePacket,
Trace>;
// Ceci n'est pas une pipe.
// This is actually a variable of FieldMetadataHelper<FieldMetadata<...>>
// type (and users are expected to use it as such, hence kCamelCase name).
// It is declared as a function to keep protozero bindings header-only as
// inline constexpr variables are not available until C++17 (while inline
// functions are).
// TODO(altimin): Use inline variable instead after adopting C++17.
static constexpr FieldMetadata_Packet kPacket() { return {}; }
template <typename T = TracePacket>
T* add_packet() {
return BeginNestedMessage<T>(1);
}
};
} // namespace pbzero
} // namespace protos
} // namespace perfetto
#endif // Include guard.

View file

@ -0,0 +1,32 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
// NOTE: This is a manually minified version of Perfetto's trace.proto.
// IMPORTANT: The coresponding .pbzero.h file must be regenerated after
// any change is made to this file. This can be done by running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the
// SDK root directory.
syntax = "proto2";
import "protos/perfetto/trace/trace_packet.proto";
package perfetto.protos;
message Trace {
repeated TracePacket packet = 1;
}

View file

@ -8,7 +8,13 @@ import 'dart:io';
Future<void> compilePerfettoProtos() async {
final processResult = await Process.run(
'./tools/build.py',
['-mdebug', '-ax64', '--no-goma', 'runtime/vm:perfetto_protos'],
[
'-mdebug',
'-ax64',
'--no-goma',
'runtime/vm:perfetto_protos_protozero',
'runtime/vm:perfetto_protos_dart'
],
);
final int exitCode = processResult.exitCode;
@ -23,19 +29,21 @@ Future<void> compilePerfettoProtos() async {
}
}
Future<void> copyPerfettoProtoHeaders() async {
final copySource = Directory('./out/DebugX64/gen/runtime/vm/protos').path;
final copyDestination = Directory('./runtime/vm').path;
const noticesToPrepend = r'''
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
late final executable;
late final args;
if (Platform.operatingSystem == 'windows') {
executable = 'xcopy';
args = [copySource, copyDestination, '/e', '/i'];
} else {
executable = 'cp';
args = ['-R', copySource, copyDestination];
}
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
''';
Future<void> copyGeneratedFiles(
{required Directory source, required Directory destination}) async {
final executable = 'cp';
final args = ['-R', source.path, destination.path];
final processResult = await Process.run(executable, args);
final int exitCode = processResult.exitCode;
@ -50,30 +58,72 @@ Future<void> copyPerfettoProtoHeaders() async {
}
for (final file
in Directory('./runtime/vm/protos').listSync(recursive: true)) {
if (!(file is File) || !file.path.endsWith('.pbzero.h')) {
in Directory('${destination.path}/protos').listSync(recursive: true)) {
if (!(file is File &&
(file.path.endsWith('.pbzero.h') ||
file.path.endsWith('.pb.dart') ||
file.path.endsWith('.pbenum.dart') ||
file.path.endsWith('.pbjson.dart') ||
file.path.endsWith('.pbserver.dart')))) {
continue;
}
if (file.path.endsWith('.pbenum.dart') &&
file.readAsStringSync().indexOf('class') == -1) {
// Sometimes .pbenum.dart files that are effictively empty get generated,
// so we delete them.
file.deleteSync();
continue;
}
final contentsIncludingPrependedNotices = r'''
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
// IMPORTANT: This file should only ever be modified by modifying the
// corresponding .proto file and then running
// `dart runtime/vm/protos/tools/compile_perfetto_protos.dart` from the SDK root
// directory.
''' +
file.readAsStringSync();
final contentsIncludingPrependedNotices =
noticesToPrepend + file.readAsStringSync();
file.writeAsStringSync(contentsIncludingPrependedNotices, flush: true);
}
}
void createFileThatExportsAllGeneratedDartCode() {
final file = File('./pkg/vm_service_protos/lib/vm_service_protos.dart');
if (!file.existsSync()) {
file.createSync();
}
file.writeAsStringSync(noticesToPrepend + '\n');
final generatedDartFilePaths =
Directory('./pkg/vm_service_protos/lib/src/protos/perfetto')
.listSync(recursive: true)
.where((entity) => entity is File)
.map((file) => file.path)
.toList();
generatedDartFilePaths.sort();
for (final path in generatedDartFilePaths) {
final pathToExport = path.replaceAll('./pkg/vm_service_protos/lib/', '');
file.writeAsStringSync("export '$pathToExport';\n", mode: FileMode.append);
}
}
main(List<String> files) async {
if (!Directory('./runtime/vm').existsSync()) {
print('Error: this tool must be run from the root directory of the SDK.');
return;
}
if (!Platform.isLinux) {
// TODO(derekx): The compilation of protoc fails on MacOS due to the error
// "'sprintf' is deprecated". When bumping protobuf, check if this problem
// has been resolved.
print('Error: this tool can only be run on Linux because protoc has '
'compatibility issues on other platforms.');
return;
}
await compilePerfettoProtos();
await copyPerfettoProtoHeaders();
await copyGeneratedFiles(
destination: Directory('./runtime/vm'),
source: Directory('./out/DebugX64/gen/runtime/vm/protos'),
);
await copyGeneratedFiles(
destination: Directory('./pkg/vm_service_protos/lib/src'),
source:
Directory('./out/DebugX64/gen/pkg/vm_service_protos/lib/src/protos'),
);
createFileThatExportsAllGeneratedDartCode();
}