Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 32 additions & 15 deletions lib/web_ui/lib/src/engine.dart
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,9 @@ export 'engine/pointer_binding.dart';
// import 'engine/pointer_converter.dart';
export 'engine/pointer_converter.dart';

import 'engine/profiler.dart';
export 'engine/profiler.dart';

// This import is intentionally commented out because the analyzer says it's unused.
// import 'engine/services/buffers.dart';
export 'engine/services/buffers.dart';
Expand All @@ -135,6 +138,32 @@ export 'engine/shadow.dart';
import 'engine/test_embedding.dart';
export 'engine/test_embedding.dart';

import 'engine/text/layout_service.dart';
export 'engine/text/layout_service.dart';

export 'engine/text/line_break_properties.dart';

export 'engine/text/line_breaker.dart';

import 'engine/text/measurement.dart';
export 'engine/text/measurement.dart';

export 'engine/text/paint_service.dart';

import 'engine/text/paragraph.dart';
export 'engine/text/paragraph.dart';

export 'engine/text/canvas_paragraph.dart';

export 'engine/text/ruler.dart';

export 'engine/text/unicode_range.dart';

export 'engine/text/word_break_properties.dart';

export 'engine/text/word_breaker.dart';


import 'engine/util.dart';
export 'engine/util.dart';

Expand Down Expand Up @@ -253,7 +282,6 @@ part 'engine/platform_views.dart';
part 'engine/platform_views/content_manager.dart';
part 'engine/platform_views/message_handler.dart';
part 'engine/platform_views/slots.dart';
part 'engine/profiler.dart';
part 'engine/rrect_renderer.dart';
part 'engine/semantics/accessibility.dart';
part 'engine/semantics/checkable.dart';
Expand All @@ -267,17 +295,6 @@ part 'engine/semantics/semantics_helper.dart';
part 'engine/semantics/tappable.dart';
part 'engine/semantics/text_field.dart';
part 'engine/text/font_collection.dart';
part 'engine/text/layout_service.dart';
part 'engine/text/line_break_properties.dart';
part 'engine/text/line_breaker.dart';
part 'engine/text/measurement.dart';
part 'engine/text/paint_service.dart';
part 'engine/text/paragraph.dart';
part 'engine/text/canvas_paragraph.dart';
part 'engine/text/ruler.dart';
part 'engine/text/unicode_range.dart';
part 'engine/text/word_break_properties.dart';
part 'engine/text/word_breaker.dart';
part 'engine/text_editing/autofill_hint.dart';
part 'engine/text_editing/input_type.dart';
part 'engine/text_editing/text_capitalization.dart';
Expand Down Expand Up @@ -364,7 +381,7 @@ void initializeEngine() {
if (!waitingForAnimation) {
waitingForAnimation = true;
html.window.requestAnimationFrame((num highResTime) {
_frameTimingsOnVsync();
frameTimingsOnVsync();

// Reset immediately, because `frameHandler` can schedule more frames.
waitingForAnimation = false;
Expand All @@ -379,10 +396,10 @@ void initializeEngine() {
// In Flutter terminology "building a frame" consists of "beginning
// frame" and "drawing frame".
//
// We do not call `_frameTimingsOnBuildFinish` from here because
// We do not call `frameTimingsOnBuildFinish` from here because
// part of the rasterization process, particularly in the HTML
// renderer, takes place in the `SceneBuilder.build()`.
_frameTimingsOnBuildStart();
frameTimingsOnBuildStart();
if (EnginePlatformDispatcher.instance._onBeginFrame != null) {
EnginePlatformDispatcher.instance.invokeOnBeginFrame(
Duration(microseconds: highResTimeMicroseconds));
Expand Down
40 changes: 20 additions & 20 deletions lib/web_ui/lib/src/engine/html/bitmap_canvas.dart
Original file line number Diff line number Diff line change
Expand Up @@ -241,11 +241,11 @@ class BitmapCanvas extends EngineCanvas {
}

/// Sets the global paint styles to correspond to [paint].
void _setUpPaint(SurfacePaintData paint, ui.Rect? shaderBounds) {
void setUpPaint(SurfacePaintData paint, ui.Rect? shaderBounds) {
_canvasPool.contextHandle.setUpPaint(paint, shaderBounds);
}

void _tearDownPaint() {
void tearDownPaint() {
_canvasPool.contextHandle.tearDownPaint();
}

Expand Down Expand Up @@ -383,9 +383,9 @@ class BitmapCanvas extends EngineCanvas {
} else {
ui.Rect? shaderBounds =
(paint.shader != null) ? ui.Rect.fromPoints(p1, p2) : null;
_setUpPaint(paint, shaderBounds);
setUpPaint(paint, shaderBounds);
_canvasPool.strokeLine(p1, p2);
_tearDownPaint();
tearDownPaint();
}
}

Expand All @@ -396,9 +396,9 @@ class BitmapCanvas extends EngineCanvas {
} else {
ui.Rect? shaderBounds =
(paint.shader != null) ? _computePictureBounds() : null;
_setUpPaint(paint, shaderBounds);
setUpPaint(paint, shaderBounds);
_canvasPool.fill();
_tearDownPaint();
tearDownPaint();
}
}

Expand All @@ -413,9 +413,9 @@ class BitmapCanvas extends EngineCanvas {
math.min(rect.left, rect.right), math.min(rect.top, rect.bottom)),
paint);
} else {
_setUpPaint(paint, rect);
setUpPaint(paint, rect);
_canvasPool.drawRect(rect, paint.style);
_tearDownPaint();
tearDownPaint();
}
}

Expand Down Expand Up @@ -458,17 +458,17 @@ class BitmapCanvas extends EngineCanvas {
math.min(rect.left, rect.right), math.min(rect.top, rect.bottom)),
paint);
} else {
_setUpPaint(paint, rrect.outerRect);
setUpPaint(paint, rrect.outerRect);
_canvasPool.drawRRect(rrect, paint.style);
_tearDownPaint();
tearDownPaint();
}
}

@override
void drawDRRect(ui.RRect outer, ui.RRect inner, SurfacePaintData paint) {
_setUpPaint(paint, outer.outerRect);
setUpPaint(paint, outer.outerRect);
_canvasPool.drawDRRect(outer, inner, paint.style);
_tearDownPaint();
tearDownPaint();
}

@override
Expand All @@ -484,9 +484,9 @@ class BitmapCanvas extends EngineCanvas {
element.style.borderRadius =
'${(rect.width / 2.0)}px / ${(rect.height / 2.0)}px';
} else {
_setUpPaint(paint, rect);
setUpPaint(paint, rect);
_canvasPool.drawOval(rect, paint.style);
_tearDownPaint();
tearDownPaint();
}
}

Expand All @@ -503,13 +503,13 @@ class BitmapCanvas extends EngineCanvas {
paint);
element.style.borderRadius = '50%';
} else {
_setUpPaint(
setUpPaint(
paint,
paint.shader != null
? ui.Rect.fromCircle(center: c, radius: radius)
: null);
_canvasPool.drawCircle(c, radius, paint.style);
_tearDownPaint();
tearDownPaint();
}
}

Expand Down Expand Up @@ -560,13 +560,13 @@ class BitmapCanvas extends EngineCanvas {
_applyFilter(svgElm, paint);
_drawElement(svgElm, ui.Offset(0, 0), paint);
} else {
_setUpPaint(paint, paint.shader != null ? path.getBounds() : null);
setUpPaint(paint, paint.shader != null ? path.getBounds() : null);
if (paint.style == null && paint.strokeWidth != null) {
_canvasPool.drawPath(path, ui.PaintingStyle.stroke);
} else {
_canvasPool.drawPath(path, paint.style);
}
_tearDownPaint();
tearDownPaint();
}
}

Expand Down Expand Up @@ -1009,10 +1009,10 @@ class BitmapCanvas extends EngineCanvas {
final double strokeWidth =
paint.strokeWidth == null ? 1.0 / dpr : paint.strokeWidth!;
_drawPointsPaint.strokeWidth = strokeWidth;
_setUpPaint(_drawPointsPaint, null);
setUpPaint(_drawPointsPaint, null);
// Draw point using circle with half radius.
_canvasPool.drawPoints(pointMode, points, strokeWidth / 2.0);
_tearDownPaint();
tearDownPaint();
}

@override
Expand Down
4 changes: 2 additions & 2 deletions lib/web_ui/lib/src/engine/html/scene_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -546,8 +546,8 @@ class SurfaceSceneBuilder implements ui.SceneBuilder {
// In the HTML renderer we time the beginning of the rasterization phase
// (counter-intuitively) in SceneBuilder.build because DOM updates happen
// here. This is different from CanvasKit.
_frameTimingsOnBuildFinish();
_frameTimingsOnRasterStart();
frameTimingsOnBuildFinish();
frameTimingsOnRasterStart();
timeAction<void>(kProfilePrerollFrame, () {
while (_surfaceStack.length > 1) {
// Auto-pop layers that were pushed without a corresponding pop.
Expand Down
6 changes: 3 additions & 3 deletions lib/web_ui/lib/src/engine/platform_dispatcher.dart
Original file line number Diff line number Diff line change
Expand Up @@ -568,16 +568,16 @@ class EnginePlatformDispatcher extends ui.PlatformDispatcher {
// CanvasKit works differently from the HTML renderer in that in HTML
// we update the DOM in SceneBuilder.build, which is these function calls
// here are CanvasKit-only.
_frameTimingsOnBuildFinish();
_frameTimingsOnRasterStart();
frameTimingsOnBuildFinish();
frameTimingsOnRasterStart();

final LayerScene layerScene = scene as LayerScene;
rasterizer!.draw(layerScene.layerTree);
} else {
final SurfaceScene surfaceScene = scene as SurfaceScene;
domRenderer.renderScene(surfaceScene.webOnlyRootElement);
}
_frameTimingsOnRasterFinish();
frameTimingsOnRasterFinish();
}

/// Additional accessibility features that may be enabled by the platform.
Expand Down
19 changes: 12 additions & 7 deletions lib/web_ui/lib/src/engine/profiler.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

part of engine;
import 'dart:async';
import 'dart:html' as html;
import 'dart:js_util' as js_util;

import 'package:ui/ui.dart' as ui;
import 'package:ui/src/engine.dart' show EnginePlatformDispatcher;

/// A function that receives a benchmark [value] labeleb by [name].
typedef OnBenchmark = void Function(String name, double value);
Expand Down Expand Up @@ -109,7 +114,7 @@ class Profiler {

/// Whether we are collecting [ui.FrameTiming]s.
bool get _frameTimingsEnabled {
return EnginePlatformDispatcher.instance._onReportTimings != null;
return EnginePlatformDispatcher.instance.onReportTimings != null;
}

/// Collects frame timings from frames.
Expand All @@ -133,23 +138,23 @@ int _rasterStartMicros = -1;
int _rasterFinishMicros = -1;

/// Records the vsync timestamp for this frame.
void _frameTimingsOnVsync() {
void frameTimingsOnVsync() {
if (!_frameTimingsEnabled) {
return;
}
_vsyncStartMicros = _nowMicros();
}

/// Records the time when the framework started building the frame.
void _frameTimingsOnBuildStart() {
void frameTimingsOnBuildStart() {
if (!_frameTimingsEnabled) {
return;
}
_buildStartMicros = _nowMicros();
}

/// Records the time when the framework finished building the frame.
void _frameTimingsOnBuildFinish() {
void frameTimingsOnBuildFinish() {
if (!_frameTimingsEnabled) {
return;
}
Expand All @@ -170,7 +175,7 @@ void _frameTimingsOnBuildFinish() {
///
/// CanvasKit captures everything because we control the rasterization
/// process, so we know exactly when rasterization starts and ends.
void _frameTimingsOnRasterStart() {
void frameTimingsOnRasterStart() {
if (!_frameTimingsEnabled) {
return;
}
Expand All @@ -181,7 +186,7 @@ void _frameTimingsOnRasterStart() {
///
/// See [_frameTimingsOnRasterStart] for more details on what rasterization
/// timings mean on the web.
void _frameTimingsOnRasterFinish() {
void frameTimingsOnRasterFinish() {
if (!_frameTimingsEnabled) {
return;
}
Expand Down
Loading