mirror of
https://github.com/dart-lang/sdk
synced 2024-09-15 22:41:41 +00:00
[dart:developer] Add static Service.getObjectId method
TEST=pkg/vm_service/test/developer_service_get_object_id_test.dart Fixes: https://github.com/dart-lang/sdk/issues/53012 Change-Id: I4b4dd49363ff2d91361e9054631516ea1520d3b6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/317160 Reviewed-by: Siva Annamalai <asiva@google.com> Reviewed-by: Stephen Adams <sra@google.com> Commit-Queue: Derek Xu <derekx@google.com> Reviewed-by: Ben Konyi <bkonyi@google.com> Reviewed-by: Aske Simon Christensen <askesc@google.com> Reviewed-by: Leaf Petersen <leafp@google.com>
This commit is contained in:
parent
0d16e25c6c
commit
d0114ec0a2
|
@ -0,0 +1,35 @@
|
||||||
|
// 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:developer';
|
||||||
|
|
||||||
|
import 'package:test/test.dart';
|
||||||
|
import 'package:vm_service/vm_service.dart';
|
||||||
|
|
||||||
|
import 'common/test_helper.dart';
|
||||||
|
|
||||||
|
final abcString = "abc";
|
||||||
|
|
||||||
|
final tests = <IsolateTest>[
|
||||||
|
(VmService service, IsolateRef isolateRef) async {
|
||||||
|
final isolateId = isolateRef.id!;
|
||||||
|
final isolate = await service.getIsolate(isolateId);
|
||||||
|
final evalResult = await service.evaluate(
|
||||||
|
isolateId, isolate.rootLib!.id!, 'abcString') as InstanceRef;
|
||||||
|
final getObjectIdResult = await Service.getObjectId(abcString)!;
|
||||||
|
final objectFromEval =
|
||||||
|
await service.getObject(isolateId, evalResult.id!) as Instance;
|
||||||
|
final objectFromGetObjectId =
|
||||||
|
await service.getObject(isolateId, getObjectIdResult) as Instance;
|
||||||
|
expect(objectFromEval.identityHashCode,
|
||||||
|
objectFromGetObjectId.identityHashCode);
|
||||||
|
expect(objectFromEval.valueAsString, objectFromGetObjectId.valueAsString);
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
|
main([args = const <String>[]]) async => runIsolateTests(
|
||||||
|
args,
|
||||||
|
tests,
|
||||||
|
'developer_service_get_object_id_test.dart',
|
||||||
|
);
|
|
@ -168,6 +168,18 @@ DEFINE_NATIVE_ENTRY(Developer_getIsolateIdFromSendPort, 0, 1) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFINE_NATIVE_ENTRY(Developer_getObjectId, 0, 1) {
|
||||||
|
#if defined(PRODUCT)
|
||||||
|
return Object::null();
|
||||||
|
#else
|
||||||
|
GET_NON_NULL_NATIVE_ARGUMENT(Instance, instance, arguments->NativeArgAt(0));
|
||||||
|
JSONStream js;
|
||||||
|
RingServiceIdZone& ring_service_id_zone =
|
||||||
|
*reinterpret_cast<RingServiceIdZone*>(js.id_zone());
|
||||||
|
return String::New(ring_service_id_zone.GetServiceId(instance));
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
DEFINE_NATIVE_ENTRY(Developer_reachability_barrier, 0, 0) {
|
DEFINE_NATIVE_ENTRY(Developer_reachability_barrier, 0, 0) {
|
||||||
IsolateGroup* isolate_group = thread->isolate_group();
|
IsolateGroup* isolate_group = thread->isolate_group();
|
||||||
ASSERT(isolate_group != nullptr);
|
ASSERT(isolate_group != nullptr);
|
||||||
|
|
|
@ -69,6 +69,7 @@ namespace dart {
|
||||||
V(Mint_bitLength, 1) \
|
V(Mint_bitLength, 1) \
|
||||||
V(Developer_debugger, 2) \
|
V(Developer_debugger, 2) \
|
||||||
V(Developer_getIsolateIdFromSendPort, 1) \
|
V(Developer_getIsolateIdFromSendPort, 1) \
|
||||||
|
V(Developer_getObjectId, 1) \
|
||||||
V(Developer_getServerInfo, 1) \
|
V(Developer_getServerInfo, 1) \
|
||||||
V(Developer_getServiceMajorVersion, 0) \
|
V(Developer_getServiceMajorVersion, 0) \
|
||||||
V(Developer_getServiceMinorVersion, 0) \
|
V(Developer_getServiceMinorVersion, 0) \
|
||||||
|
|
|
@ -280,6 +280,11 @@ String? _getIsolateIdFromSendPort(SendPort sendPort) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@patch
|
||||||
|
String? _getObjectId(Object object) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@patch
|
@patch
|
||||||
class UserTag {
|
class UserTag {
|
||||||
@patch
|
@patch
|
||||||
|
|
|
@ -200,6 +200,11 @@ String? _getIsolateIdFromSendPort(SendPort sendPort) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@patch
|
||||||
|
String? _getObjectId(Object object) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@patch
|
@patch
|
||||||
class UserTag {
|
class UserTag {
|
||||||
@patch
|
@patch
|
||||||
|
|
|
@ -180,6 +180,10 @@ external void _webServerControl(
|
||||||
@pragma("vm:external-name", "Developer_getIsolateIdFromSendPort")
|
@pragma("vm:external-name", "Developer_getIsolateIdFromSendPort")
|
||||||
external String _getIsolateIdFromSendPort(SendPort sendPort);
|
external String _getIsolateIdFromSendPort(SendPort sendPort);
|
||||||
|
|
||||||
|
@patch
|
||||||
|
@pragma("vm:external-name", "Developer_getObjectId")
|
||||||
|
external String _getObjectId(Object object);
|
||||||
|
|
||||||
@patch
|
@patch
|
||||||
abstract final class NativeRuntime {
|
abstract final class NativeRuntime {
|
||||||
@patch
|
@patch
|
||||||
|
|
|
@ -118,6 +118,14 @@ final class Service {
|
||||||
ArgumentError.checkNotNull(isolate, 'isolate');
|
ArgumentError.checkNotNull(isolate, 'isolate');
|
||||||
return _getIsolateIdFromSendPort(isolate.controlPort);
|
return _getIsolateIdFromSendPort(isolate.controlPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns a [String] token representing the ID of [object].
|
||||||
|
///
|
||||||
|
/// Returns null if the running Dart environment does not support the service
|
||||||
|
/// protocol.
|
||||||
|
static String? getObjectId(Object object) {
|
||||||
|
return _getObjectId(object);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// [sendPort] will receive a Uri or null.
|
/// [sendPort] will receive a Uri or null.
|
||||||
|
@ -135,3 +143,6 @@ external int _getServiceMinorVersion();
|
||||||
|
|
||||||
/// Returns the service id for the isolate that owns [sendPort].
|
/// Returns the service id for the isolate that owns [sendPort].
|
||||||
external String? _getIsolateIdFromSendPort(SendPort sendPort);
|
external String? _getIsolateIdFromSendPort(SendPort sendPort);
|
||||||
|
|
||||||
|
/// Returns the service id of [object].
|
||||||
|
external String? _getObjectId(Object object);
|
||||||
|
|
Loading…
Reference in a new issue