Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Skwasm Font Loading #41246

Merged
merged 47 commits into from May 4, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
4e7c927
Started skwasm fonts implementation.
eyebrowsoffire Apr 15, 2023
ee37876
Fix mock http stuff to allow read callback.
eyebrowsoffire Apr 15, 2023
b221162
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 15, 2023
a11804e
Update licenses golden.
eyebrowsoffire Apr 15, 2023
553e23f
Fix typo in function name.
eyebrowsoffire Apr 15, 2023
42d56a7
Don't dartify values of string chunks.
eyebrowsoffire Apr 17, 2023
b1ed991
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 17, 2023
4fb3179
Avoid using the `JSUint8Array` type objects, as the typedefs on the J…
eyebrowsoffire Apr 17, 2023
e5148b1
Change typed array's `set` signature.
eyebrowsoffire Apr 17, 2023
77f0010
Update licenses golden.
eyebrowsoffire Apr 17, 2023
393ea59
Fix some unit tests.
eyebrowsoffire Apr 17, 2023
0c2a2b4
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 17, 2023
1946222
Reorganized some testing things.
eyebrowsoffire Apr 18, 2023
fd423fe
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 18, 2023
bf1f0fe
Update licenses golden.
eyebrowsoffire Apr 18, 2023
4da620f
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 18, 2023
c3207d9
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 18, 2023
f748764
Reverted some of the test reorganization stuff that the framework was…
eyebrowsoffire Apr 19, 2023
fc03551
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 19, 2023
e2f2968
Update licenses golden.
eyebrowsoffire Apr 19, 2023
bff36e4
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 20, 2023
1689301
Partway through font loading refactor.
eyebrowsoffire Apr 21, 2023
99f0787
More unit test fixes.
eyebrowsoffire Apr 21, 2023
65afc9b
More unit test fixes.
eyebrowsoffire Apr 22, 2023
58877c3
More unit test fixes.
eyebrowsoffire Apr 22, 2023
b443e65
Fix some more unit tests.
eyebrowsoffire Apr 22, 2023
7176cc4
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 22, 2023
eeaa29c
Fix some formatting.
eyebrowsoffire Apr 22, 2023
a05e3e1
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 23, 2023
e06b885
Use a cast that works on all backends.
eyebrowsoffire Apr 23, 2023
be4d95b
Added font collection tests for asset loaded fonts.
eyebrowsoffire Apr 23, 2023
823eabb
Removed unused initialization function.
eyebrowsoffire Apr 23, 2023
c4efba5
Changed some test setups.
eyebrowsoffire Apr 24, 2023
3ab2e66
Fixed some test initialization stuff.
eyebrowsoffire Apr 24, 2023
63cce92
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 24, 2023
7cfe6fd
Remove unused imports.
eyebrowsoffire Apr 24, 2023
7a6c015
Fix screenshot timing.
eyebrowsoffire Apr 24, 2023
03d4a81
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 24, 2023
156be52
Merge branch 'main' into skwasm_fonts
eyebrowsoffire Apr 26, 2023
751dc1b
Merge branch 'main' into skwasm_fonts
eyebrowsoffire May 1, 2023
255f475
Fix a few minor things found while setting up text.
eyebrowsoffire May 1, 2023
4fcfd1e
Merge branch 'main' into skwasm_fonts
eyebrowsoffire May 4, 2023
0c7fd60
Consolidate initialization of fallbacks stuff.
eyebrowsoffire May 4, 2023
b4785f1
Pump 15 frames before taking screenshots at the recommendation of the…
eyebrowsoffire May 4, 2023
bc02553
Merge branch 'main' into skwasm_fonts
eyebrowsoffire May 4, 2023
7d6e649
Remove some unused stuff and add a few `final`s
eyebrowsoffire May 4, 2023
da60d47
Merge branch 'main' into skwasm_fonts
eyebrowsoffire May 4, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 16 additions & 2 deletions ci/licenses_golden/licenses_flutter
Expand Up @@ -1949,6 +1949,7 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/html_image_codec.dart + ../..
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/initialization.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_loader.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_promise.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_typed_data.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/key_map.g.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/keyboard_binding.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/mouse_cursor.dart + ../../../flutter/LICENSE
Expand Down Expand Up @@ -2001,16 +2002,19 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/paragraph.
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/path.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/path_metrics.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/picture.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/js_functions.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_canvas.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_fonts.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_geometry.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_memory.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_paint.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_path.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_path_metrics.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_picture.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_shaders.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_skdata.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_skstring.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_surface.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/skwasm_module.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/renderer.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/scene_builder.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/shaders.dart + ../../../flutter/LICENSE
Expand Down Expand Up @@ -2060,12 +2064,15 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/url_strategy.dart + ..
ORIGIN: ../../../flutter/lib/web_ui/lib/window.dart + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/canvas.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/contour_measure.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/data.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/export.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/fonts.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/helpers.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/paint.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/path.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/picture.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/shaders.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/string.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/surface.cpp + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/lib/web_ui/skwasm/wrappers.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/runtime/dart_isolate.cc + ../../../flutter/LICENSE
Expand Down Expand Up @@ -4545,6 +4552,7 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/html_image_codec.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/initialization.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_loader.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_promise.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_typed_data.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/key_map.g.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/keyboard_binding.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/mouse_cursor.dart
Expand Down Expand Up @@ -4597,16 +4605,19 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/paragraph.da
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/path.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/path_metrics.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/picture.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/js_functions.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_canvas.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_fonts.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_geometry.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_memory.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_paint.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_path.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_path_metrics.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_picture.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_shaders.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_skdata.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_skstring.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_surface.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/skwasm_module.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/renderer.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/scene_builder.dart
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/shaders.dart
Expand Down Expand Up @@ -4656,12 +4667,15 @@ FILE: ../../../flutter/lib/web_ui/lib/ui_web/src/ui_web/url_strategy.dart
FILE: ../../../flutter/lib/web_ui/lib/window.dart
FILE: ../../../flutter/lib/web_ui/skwasm/canvas.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/contour_measure.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/data.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/export.h
FILE: ../../../flutter/lib/web_ui/skwasm/fonts.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/helpers.h
FILE: ../../../flutter/lib/web_ui/skwasm/paint.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/path.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/picture.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/shaders.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/string.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/surface.cpp
FILE: ../../../flutter/lib/web_ui/skwasm/wrappers.h
FILE: ../../../flutter/runtime/dart_isolate.cc
Expand Down
1 change: 1 addition & 0 deletions lib/web_ui/lib/src/engine.dart
Expand Up @@ -108,6 +108,7 @@ export 'engine/html_image_codec.dart';
export 'engine/initialization.dart';
export 'engine/js_interop/js_loader.dart';
export 'engine/js_interop/js_promise.dart';
export 'engine/js_interop/js_typed_data.dart';
export 'engine/key_map.g.dart';
export 'engine/keyboard_binding.dart';
export 'engine/mouse_cursor.dart';
Expand Down
90 changes: 0 additions & 90 deletions lib/web_ui/lib/src/engine/assets.dart
Expand Up @@ -8,20 +8,6 @@ import 'dart:typed_data';
import 'dom.dart';
import 'util.dart';

const String ahemFontFamily = 'Ahem';
const String ahemFontUrl = '/assets/fonts/ahem.ttf';
const String robotoFontFamily = 'Roboto';
const String robotoTestFontUrl = '/assets/fonts/Roboto-Regular.ttf';

/// The list of test fonts, in the form of font family name - font file url pairs.
/// This list does not include embedded test fonts, which need to be loaded and
/// registered separately in [FontCollection.debugDownloadTestFonts].
const Map<String, String> testFontUrls = <String, String>{
ahemFontFamily: ahemFontUrl,
robotoFontFamily: robotoTestFontUrl,
'RobotoVariable': '/assets/fonts/RobotoSlab-VariableFont_wght.ttf',
};

/// This class downloads assets over the network.
///
/// Assets are resolved relative to [assetsDir] inside the absolute base
Expand Down Expand Up @@ -110,79 +96,3 @@ class AssetManager {
return (await response.payload.asByteBuffer()).asByteData();
}
}

/// An asset manager that gives fake empty responses for assets.
class WebOnlyMockAssetManager extends AssetManager {
/// Mock asset directory relative to base url.
String defaultAssetsDir = '';

/// Mock empty asset manifest.
String defaultAssetManifest = '{}';

/// Mock font manifest overridable for unit testing.
String defaultFontManifest = '''
[
{
"family":"$robotoFontFamily",
"fonts":[{"asset":"$robotoTestFontUrl"}]
},
{
"family":"$ahemFontFamily",
"fonts":[{"asset":"$ahemFontUrl"}]
}
]''';

@override
String get assetsDir => defaultAssetsDir;

@override
String getAssetUrl(String asset) => asset;

@override
Future<HttpFetchResponse> loadAsset(String asset) async {
if (asset == getAssetUrl('AssetManifest.json')) {
return MockHttpFetchResponse(
url: asset,
status: 200,
payload: MockHttpFetchPayload(
byteBuffer: _toByteData(utf8.encode(defaultAssetManifest)).buffer,
),
);
}
if (asset == getAssetUrl('FontManifest.json')) {
return MockHttpFetchResponse(
url: asset,
status: 200,
payload: MockHttpFetchPayload(
byteBuffer: _toByteData(utf8.encode(defaultFontManifest)).buffer,
),
);
}

return MockHttpFetchResponse(
url: asset,
status: 404,
);
}

@override
Future<ByteData> load(String asset) {
if (asset == getAssetUrl('AssetManifest.json')) {
return Future<ByteData>.value(
_toByteData(utf8.encode(defaultAssetManifest)));
}
if (asset == getAssetUrl('FontManifest.json')) {
return Future<ByteData>.value(
_toByteData(utf8.encode(defaultFontManifest)));
}
throw HttpFetchNoPayloadError(asset, status: 404);
}

ByteData _toByteData(List<int> bytes) {
final ByteData byteData = ByteData(bytes.length);
for (int i = 0; i < bytes.length; i++) {
byteData.setUint8(i, bytes[i]);
}
return byteData;
}
}
2 changes: 1 addition & 1 deletion lib/web_ui/lib/src/engine/canvaskit/font_fallbacks.dart
Expand Up @@ -456,7 +456,7 @@ class FallbackFontDownloadQueue {
final Uint8List bytes = downloadedData[url]!;
FontFallbackData.instance.registerFallbackFont(font.name, bytes);
if (pendingFonts.isEmpty) {
renderer.fontCollection.registerDownloadedFonts();
(renderer.fontCollection as SkiaFontCollection).registerDownloadedFonts();
sendFontChangeMessage();
}
}
Expand Down