mirror of
https://github.com/encounter/engine.git
synced 2026-03-30 11:09:55 -07:00
0a455a8207
Added channel buffers to 'ui' so that messages have a place to go until message handling is setup.
91 lines
3.0 KiB
Dart
91 lines
3.0 KiB
Dart
// Copyright 2013 The Flutter Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// TODO(dnfield): remove unused_element ignores when https://github.com/dart-lang/sdk/issues/35164 is resolved.
|
|
|
|
part of dart.ui;
|
|
|
|
// Corelib 'print' implementation.
|
|
void _print(dynamic arg) {
|
|
_Logger._printString(arg.toString());
|
|
}
|
|
|
|
void _printDebug(dynamic arg) {
|
|
_Logger._printDebugString(arg.toString());
|
|
}
|
|
|
|
class _Logger {
|
|
static void _printString(String s) native 'Logger_PrintString';
|
|
static void _printDebugString(String s) native 'Logger_PrintDebugString';
|
|
}
|
|
|
|
// If we actually run on big endian machines, we'll need to do something smarter
|
|
// here. We don't use [Endian.Host] because it's not a compile-time
|
|
// constant and can't propagate into the set/get calls.
|
|
const Endian _kFakeHostEndian = Endian.little;
|
|
|
|
// A service protocol extension to schedule a frame to be rendered into the
|
|
// window.
|
|
Future<developer.ServiceExtensionResponse> _scheduleFrame(
|
|
String method,
|
|
Map<String, String> parameters
|
|
) async {
|
|
// Schedule the frame.
|
|
window.scheduleFrame();
|
|
// Always succeed.
|
|
return developer.ServiceExtensionResponse.result(json.encode(<String, String>{
|
|
'type': 'Success',
|
|
}));
|
|
}
|
|
|
|
@pragma('vm:entry-point')
|
|
void _setupHooks() { // ignore: unused_element
|
|
assert(() {
|
|
// In debug mode, register the schedule frame extension.
|
|
developer.registerExtension('ext.ui.window.scheduleFrame', _scheduleFrame);
|
|
return true;
|
|
}());
|
|
}
|
|
|
|
/// Returns runtime Dart compilation trace as a UTF-8 encoded memory buffer.
|
|
///
|
|
/// The buffer contains a list of symbols compiled by the Dart JIT at runtime up
|
|
/// to the point when this function was called. This list can be saved to a text
|
|
/// file and passed to tools such as `flutter build` or Dart `gen_snapshot` in
|
|
/// order to pre-compile this code offline.
|
|
///
|
|
/// The list has one symbol per line of the following format:
|
|
/// `<namespace>,<class>,<symbol>\n`.
|
|
///
|
|
/// Here are some examples:
|
|
///
|
|
/// ```
|
|
/// dart:core,Duration,get:inMilliseconds
|
|
/// package:flutter/src/widgets/binding.dart,::,runApp
|
|
/// file:///.../my_app.dart,::,main
|
|
/// ```
|
|
///
|
|
/// This function is only effective in debug and dynamic modes, and will throw in AOT mode.
|
|
List<int> saveCompilationTrace() {
|
|
final dynamic result = _saveCompilationTrace();
|
|
if (result is Error)
|
|
throw result;
|
|
return result;
|
|
}
|
|
|
|
dynamic _saveCompilationTrace() native 'SaveCompilationTrace';
|
|
|
|
void _scheduleMicrotask(void callback()) native 'ScheduleMicrotask';
|
|
|
|
int _getCallbackHandle(Function closure) native 'GetCallbackHandle';
|
|
Function _getCallbackFromHandle(int handle) native 'GetCallbackFromHandle';
|
|
|
|
// Required for gen_snapshot to work correctly.
|
|
int _isolateId; // ignore: unused_element
|
|
|
|
@pragma('vm:entry-point')
|
|
Function _getPrintClosure() => _print; // ignore: unused_element
|
|
@pragma('vm:entry-point')
|
|
Function _getScheduleMicrotaskClosure() => _scheduleMicrotask; // ignore: unused_element
|