mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 09:58:32 +00:00
4f5a6c8530
Closes: https://github.com/dart-lang/sdk/issues/54072 Change-Id: Id9babd0ca9e4c6de35104b975bf7acbd9b1564ef Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/336882 Reviewed-by: Tess Strickland <sstrickl@google.com> Auto-Submit: Daco Harkes <dacoharkes@google.com> Commit-Queue: Tess Strickland <sstrickl@google.com> Commit-Queue: Daco Harkes <dacoharkes@google.com>
359 lines
6.6 KiB
Dart
359 lines
6.6 KiB
Dart
// 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.
|
|
//
|
|
// SharedObjects=ffi_test_functions
|
|
|
|
import 'dart:ffi';
|
|
import 'dart:typed_data';
|
|
|
|
import 'dylib_utils.dart';
|
|
|
|
final ffiTestFunctions = dlopenPlatformSpecific("ffi_test_functions");
|
|
void main() {
|
|
// Force dlopen so @Native lookups in DynamicLibrary.process() succeed.
|
|
dlopenGlobalPlatformSpecific('ffi_test_functions');
|
|
|
|
testMixed();
|
|
testManyHandlesAllDifferent();
|
|
testManyHandlesAllSame();
|
|
}
|
|
|
|
void testMixed() {
|
|
callUpdateNode(
|
|
id: 42,
|
|
label: 'A: root',
|
|
labelAttributes: <Object>[],
|
|
rect: Object(),
|
|
transform: Float64List(0),
|
|
childrenInTraversalOrder: Int32List.fromList(<int>[84, 96]),
|
|
childrenInHitTestOrder: Int32List.fromList(<int>[96, 84]),
|
|
actions: 0,
|
|
flags: 0,
|
|
maxValueLength: 0,
|
|
currentValueLength: 0,
|
|
textSelectionBase: 0,
|
|
textSelectionExtent: 0,
|
|
platformViewId: 0,
|
|
scrollChildren: 0,
|
|
scrollIndex: 0,
|
|
scrollPosition: 0.0,
|
|
scrollExtentMax: 0.0,
|
|
scrollExtentMin: 0.0,
|
|
elevation: 0.0,
|
|
thickness: 0.0,
|
|
hint: '',
|
|
hintAttributes: <Object>[],
|
|
value: '',
|
|
valueAttributes: <Object>[],
|
|
increasedValue: '',
|
|
increasedValueAttributes: <Object>[],
|
|
decreasedValue: '',
|
|
decreasedValueAttributes: <Object>[],
|
|
tooltip: 'tooltip',
|
|
additionalActions: Int32List(0),
|
|
);
|
|
}
|
|
|
|
void callUpdateNode({
|
|
required int id,
|
|
required int flags,
|
|
required int actions,
|
|
required int maxValueLength,
|
|
required int currentValueLength,
|
|
required int textSelectionBase,
|
|
required int textSelectionExtent,
|
|
required int platformViewId,
|
|
required int scrollChildren,
|
|
required int scrollIndex,
|
|
required double scrollPosition,
|
|
required double scrollExtentMax,
|
|
required double scrollExtentMin,
|
|
required double elevation,
|
|
required double thickness,
|
|
required Object rect,
|
|
required String label,
|
|
required List<Object> labelAttributes,
|
|
required String value,
|
|
required List<Object> valueAttributes,
|
|
required String increasedValue,
|
|
required List<Object> increasedValueAttributes,
|
|
required String decreasedValue,
|
|
required List<Object> decreasedValueAttributes,
|
|
required String hint,
|
|
required List<Object> hintAttributes,
|
|
String? tooltip,
|
|
Object? textDirection,
|
|
required Float64List transform,
|
|
required Int32List childrenInTraversalOrder,
|
|
required Int32List childrenInHitTestOrder,
|
|
required Int32List additionalActions,
|
|
}) {
|
|
updateNode(
|
|
nullptr,
|
|
id,
|
|
flags,
|
|
actions,
|
|
maxValueLength,
|
|
currentValueLength,
|
|
textSelectionBase,
|
|
textSelectionExtent,
|
|
platformViewId,
|
|
scrollChildren,
|
|
scrollIndex,
|
|
scrollPosition,
|
|
scrollExtentMax,
|
|
scrollExtentMin,
|
|
3.0,
|
|
4.0,
|
|
5.0,
|
|
6.0,
|
|
elevation,
|
|
thickness,
|
|
label,
|
|
labelAttributes,
|
|
value,
|
|
valueAttributes,
|
|
increasedValue,
|
|
increasedValueAttributes,
|
|
decreasedValue,
|
|
decreasedValueAttributes,
|
|
hint,
|
|
hintAttributes,
|
|
tooltip ?? '',
|
|
textDirection != null ? 1 : 0,
|
|
transform,
|
|
childrenInTraversalOrder,
|
|
childrenInHitTestOrder,
|
|
additionalActions,
|
|
);
|
|
}
|
|
|
|
@Native<
|
|
Void Function(
|
|
Pointer<Void>,
|
|
Int32,
|
|
Int32,
|
|
Int32,
|
|
Int32,
|
|
Int32,
|
|
Int32,
|
|
Int32,
|
|
Int32,
|
|
Int32,
|
|
Int32,
|
|
Double,
|
|
Double,
|
|
Double,
|
|
Double,
|
|
Double,
|
|
Double,
|
|
Double,
|
|
Double,
|
|
Double,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Int32,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
)>(
|
|
symbol: 'SemanticsUpdateBuilderUpdateNode',
|
|
)
|
|
external void updateNode(
|
|
Pointer<Void> this_,
|
|
int id,
|
|
int flags,
|
|
int actions,
|
|
int maxValueLength,
|
|
int currentValueLength,
|
|
int textSelectionBase,
|
|
int textSelectionExtent,
|
|
int platformViewId,
|
|
int scrollChildren,
|
|
int scrollIndex,
|
|
double scrollPosition,
|
|
double scrollExtentMax,
|
|
double scrollExtentMin,
|
|
double left,
|
|
double top,
|
|
double right,
|
|
double bottom,
|
|
double elevation,
|
|
double thickness,
|
|
String label,
|
|
List<Object> labelAttributes,
|
|
String value,
|
|
List<Object> valueAttributes,
|
|
String increasedValue,
|
|
List<Object> increasedValueAttributes,
|
|
String decreasedValue,
|
|
List<Object> decreasedValueAttributes,
|
|
String hint,
|
|
List<Object> hintAttributes,
|
|
String tooltip,
|
|
int textDirection,
|
|
Float64List transform,
|
|
Int32List childrenInTraversalOrder,
|
|
Int32List childrenInHitTestOrder,
|
|
Int32List additionalActions,
|
|
);
|
|
|
|
void testManyHandlesAllDifferent() {
|
|
manyHandlesAllDifferent(
|
|
'foo0',
|
|
'foo1',
|
|
'foo2',
|
|
'foo3',
|
|
'foo4',
|
|
'foo5',
|
|
'foo6',
|
|
'foo7',
|
|
'foo8',
|
|
'foo9',
|
|
'foo10',
|
|
'foo11',
|
|
'foo12',
|
|
'foo13',
|
|
'foo14',
|
|
'foo15',
|
|
'foo16',
|
|
'foo17',
|
|
'foo18',
|
|
'foo19',
|
|
);
|
|
}
|
|
|
|
/// Only invoked with 20 different const String arguments.
|
|
@Native<
|
|
Void Function(
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
)>(
|
|
symbol: 'ManyHandles',
|
|
)
|
|
external void manyHandlesAllDifferent(
|
|
Object a0,
|
|
Object a1,
|
|
Object a2,
|
|
Object a3,
|
|
Object a4,
|
|
Object a5,
|
|
Object a6,
|
|
Object a7,
|
|
Object a8,
|
|
Object a9,
|
|
Object a10,
|
|
Object a11,
|
|
Object a12,
|
|
Object a13,
|
|
Object a14,
|
|
Object a15,
|
|
Object a16,
|
|
Object a17,
|
|
Object a18,
|
|
Object a19,
|
|
);
|
|
|
|
void testManyHandlesAllSame() {
|
|
manyHandlesAllSame(
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
'foo0',
|
|
);
|
|
}
|
|
|
|
/// Only invoked with 20 equal const String arguments.
|
|
@Native<
|
|
Void Function(
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
Handle,
|
|
)>(
|
|
symbol: 'ManyHandles',
|
|
)
|
|
external void manyHandlesAllSame(
|
|
Object a0,
|
|
Object a1,
|
|
Object a2,
|
|
Object a3,
|
|
Object a4,
|
|
Object a5,
|
|
Object a6,
|
|
Object a7,
|
|
Object a8,
|
|
Object a9,
|
|
Object a10,
|
|
Object a11,
|
|
Object a12,
|
|
Object a13,
|
|
Object a14,
|
|
Object a15,
|
|
Object a16,
|
|
Object a17,
|
|
Object a18,
|
|
Object a19,
|
|
);
|