[web] remove runtime effect check (flutter/engine#38832)

This commit is contained in:
Jonah Williams 2023-01-13 10:32:04 -08:00 committed by GitHub
parent 320c8f7083
commit cc5ae28c49
4 changed files with 33 additions and 50 deletions

View File

@ -136,16 +136,8 @@ extension CanvasKitExtension on CanvasKit {
Object src,
SkPartialImageInfo info,
);
/// Retrieve the RuntimeEffect namespace for null checking.
external Object? get RuntimeEffect;
}
// TODO(jonahwilliams): remove this once all CanvasKit versions
// are built in the SDK.
// https://github.com/flutter/flutter/issues/114260
final bool isRuntimeEffectAvailable = windowFlutterCanvasKit?.RuntimeEffect != null;
@JS('window.CanvasKitInit')
external Object _CanvasKitInit(CanvasKitInitOptions options);

View File

@ -384,9 +384,6 @@ class CanvasKitRenderer implements Renderer {
if (_programs.containsKey(assetKey)) {
return _programs[assetKey]!;
}
if (!isRuntimeEffectAvailable) {
throw Exception('FragmentProgram is not supported.');
}
return _programs[assetKey] = assetManager.load(assetKey).then((ByteData data) {
return CkFragmentProgram.fromBytes(assetKey, data.buffer.asUint8List());
});

View File

@ -349,44 +349,41 @@ void _shaderTests() {
});
test('RuntimeEffect', () {
// TODO(hterkelsen): Remove this check when local CanvasKit is default.
if (isRuntimeEffectAvailable) {
const String kSkSlProgram = r'''
const String kSkSlProgram = r'''
half4 main(vec2 fragCoord) {
return vec4(1.0, 0.0, 0.0, 1.0);
}
''';
final SkRuntimeEffect? effect = MakeRuntimeEffect(kSkSlProgram);
expect(effect, isNotNull);
final SkRuntimeEffect? effect = MakeRuntimeEffect(kSkSlProgram);
expect(effect, isNotNull);
const String kInvalidSkSlProgram = '';
const String kInvalidSkSlProgram = '';
// Invalid SkSL returns null.
final SkRuntimeEffect? invalidEffect = MakeRuntimeEffect(kInvalidSkSlProgram);
expect(invalidEffect, isNull);
// Invalid SkSL returns null.
final SkRuntimeEffect? invalidEffect = MakeRuntimeEffect(kInvalidSkSlProgram);
expect(invalidEffect, isNull);
final SkShader? shader = effect!.makeShader(<double>[]);
expect(shader, isNotNull);
final SkShader? shader = effect!.makeShader(<double>[]);
expect(shader, isNotNull);
// mismatched uniforms returns null.
final SkShader? invalidShader = effect.makeShader(<double>[1]);
// mismatched uniforms returns null.
final SkShader? invalidShader = effect.makeShader(<double>[1]);
expect(invalidShader, isNull);
expect(invalidShader, isNull);
const String kSkSlProgramWithUniforms = r'''
const String kSkSlProgramWithUniforms = r'''
uniform vec4 u_color;
half4 main(vec2 fragCoord) {
return u_color;
return u_color;
}
''';
''';
final SkShader? shaderWithUniform = MakeRuntimeEffect(kSkSlProgramWithUniforms)
!.makeShader(<double>[1.0, 0.0, 0.0, 1.0]);
final SkShader? shaderWithUniform = MakeRuntimeEffect(kSkSlProgramWithUniforms)
!.makeShader(<double>[1.0, 0.0, 0.0, 1.0]);
expect(shaderWithUniform, isNotNull);
}
expect(shaderWithUniform, isNotNull);
});
}

View File

@ -186,29 +186,26 @@ void testMain() {
});
test('FragmentProgram can be created from JSON IPLR bundle', () async {
// TODO(hterkelsen): Remove this check when local CanvasKit is default.
if (isRuntimeEffectAvailable) {
final Uint8List data = utf8.encode(kJsonIPLR) as Uint8List;
final CkFragmentProgram program = await CkFragmentProgram.fromBytes('test', data);
final Uint8List data = utf8.encode(kJsonIPLR) as Uint8List;
final CkFragmentProgram program = await CkFragmentProgram.fromBytes('test', data);
expect(program.effect, isNotNull);
expect(program.floatCount, 32);
expect(program.textureCount, 0);
expect(program.uniforms, hasLength(17));
expect(program.name, 'test');
expect(program.effect, isNotNull);
expect(program.floatCount, 32);
expect(program.textureCount, 0);
expect(program.uniforms, hasLength(17));
expect(program.name, 'test');
final ui.FragmentShader shader = program.fragmentShader();
final ui.FragmentShader shader = program.fragmentShader();
shader.setFloat(0, 4);
shader.dispose();
shader.setFloat(0, 4);
shader.dispose();
expect(shader.debugDisposed, true);
expect(shader.debugDisposed, true);
final ui.FragmentShader shader2 = program.fragmentShader();
final ui.FragmentShader shader2 = program.fragmentShader();
shader.setFloat(0, 5);
shader2.dispose();
expect(shader2.debugDisposed, true);
}
shader.setFloat(0, 5);
shader2.dispose();
expect(shader2.debugDisposed, true);
});
}