mirror of
https://github.com/flutter/flutter
synced 2024-09-17 23:31:55 +00:00
Add profileRenderObjectPaints
and profileRenderObjectLayouts
service extensions (#91822)
This commit is contained in:
parent
ccc8261495
commit
8fa2a5e886
|
@ -153,7 +153,6 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
|
|||
};
|
||||
},
|
||||
);
|
||||
|
||||
registerServiceExtension(
|
||||
name: 'debugDumpSemanticsTreeInTraversalOrder',
|
||||
callback: (Map<String, String> parameters) async {
|
||||
|
@ -164,7 +163,6 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
|
|||
};
|
||||
},
|
||||
);
|
||||
|
||||
registerServiceExtension(
|
||||
name: 'debugDumpSemanticsTreeInInverseHitTestOrder',
|
||||
callback: (Map<String, String> parameters) async {
|
||||
|
@ -175,6 +173,22 @@ mixin RendererBinding on BindingBase, ServicesBinding, SchedulerBinding, Gesture
|
|||
};
|
||||
},
|
||||
);
|
||||
registerBoolServiceExtension(
|
||||
name: 'profileRenderObjectPaints',
|
||||
getter: () async => debugProfilePaintsEnabled,
|
||||
setter: (bool value) async {
|
||||
if (debugProfilePaintsEnabled != value)
|
||||
debugProfilePaintsEnabled = value;
|
||||
},
|
||||
);
|
||||
registerBoolServiceExtension(
|
||||
name: 'profileRenderObjectLayouts',
|
||||
getter: () async => debugProfileLayoutsEnabled,
|
||||
setter: (bool value) async {
|
||||
if (debugProfileLayoutsEnabled != value)
|
||||
debugProfileLayoutsEnabled = value;
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -111,9 +111,8 @@ bool debugProfileLayoutsEnabled = false;
|
|||
|
||||
/// Adds [dart:developer.Timeline] events for every [RenderObject] painted.
|
||||
///
|
||||
/// This is only enabled in debug builds. The timing information this exposes is
|
||||
/// not representative of actual paints. However, it can expose unexpected
|
||||
/// painting in the timeline.
|
||||
/// The timing information this flag exposes is not representative of actual
|
||||
/// paints. However, it can expose unexpected painting in the timeline.
|
||||
///
|
||||
/// For details on how to use [dart:developer.Timeline] events in the Dart
|
||||
/// Observatory to optimize your app, see:
|
||||
|
|
|
@ -175,9 +175,9 @@ class PaintingContext extends ClipContext {
|
|||
/// into the layer subtree associated with this painting context. Otherwise,
|
||||
/// the child will be painted into the current PictureLayer for this context.
|
||||
void paintChild(RenderObject child, Offset offset) {
|
||||
if (!kReleaseMode && debugProfilePaintsEnabled)
|
||||
Timeline.startSync('${child.runtimeType}', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
assert(() {
|
||||
if (debugProfilePaintsEnabled)
|
||||
Timeline.startSync('${child.runtimeType}', arguments: timelineArgumentsIndicatingLandmarkEvent);
|
||||
debugOnProfilePaint?.call(child);
|
||||
return true;
|
||||
}());
|
||||
|
@ -189,11 +189,8 @@ class PaintingContext extends ClipContext {
|
|||
child._paintWithContext(this, offset);
|
||||
}
|
||||
|
||||
assert(() {
|
||||
if (debugProfilePaintsEnabled)
|
||||
Timeline.finishSync();
|
||||
return true;
|
||||
}());
|
||||
if (!kReleaseMode && debugProfilePaintsEnabled)
|
||||
Timeline.finishSync();
|
||||
}
|
||||
|
||||
void _compositeChild(RenderObject child, Offset offset) {
|
||||
|
|
|
@ -173,7 +173,7 @@ void main() {
|
|||
const int disabledExtensions = kIsWeb ? 2 : 0;
|
||||
// If you add a service extension... TEST IT! :-)
|
||||
// ...then increment this number.
|
||||
expect(binding.extensions.length, 33 + widgetInspectorExtensionCount - disabledExtensions);
|
||||
expect(binding.extensions.length, 35 + widgetInspectorExtensionCount - disabledExtensions);
|
||||
|
||||
expect(console, isEmpty);
|
||||
debugPrint = debugPrintThrottled;
|
||||
|
@ -442,6 +442,64 @@ void main() {
|
|||
expect(binding.frameScheduled, isFalse);
|
||||
});
|
||||
|
||||
test('Service extensions - profileRenderObjectPaints', () async {
|
||||
Map<String, dynamic> result;
|
||||
|
||||
expect(binding.frameScheduled, isFalse);
|
||||
expect(debugProfileBuildsEnabled, false);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectPaints', <String, String>{});
|
||||
expect(result, <String, String>{'enabled': 'false'});
|
||||
expect(debugProfilePaintsEnabled, false);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectPaints', <String, String>{'enabled': 'true'});
|
||||
expect(result, <String, String>{'enabled': 'true'});
|
||||
expect(debugProfilePaintsEnabled, true);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectPaints', <String, String>{});
|
||||
expect(result, <String, String>{'enabled': 'true'});
|
||||
expect(debugProfilePaintsEnabled, true);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectPaints', <String, String>{'enabled': 'false'});
|
||||
expect(result, <String, String>{'enabled': 'false'});
|
||||
expect(debugProfilePaintsEnabled, false);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectPaints', <String, String>{});
|
||||
expect(result, <String, String>{'enabled': 'false'});
|
||||
expect(debugProfilePaintsEnabled, false);
|
||||
|
||||
expect(binding.frameScheduled, isFalse);
|
||||
});
|
||||
|
||||
test('Service extensions - profileRenderObjectLayouts', () async {
|
||||
Map<String, dynamic> result;
|
||||
|
||||
expect(binding.frameScheduled, isFalse);
|
||||
expect(debugProfileLayoutsEnabled, false);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectLayouts', <String, String>{});
|
||||
expect(result, <String, String>{'enabled': 'false'});
|
||||
expect(debugProfileLayoutsEnabled, false);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectLayouts', <String, String>{'enabled': 'true'});
|
||||
expect(result, <String, String>{'enabled': 'true'});
|
||||
expect(debugProfileLayoutsEnabled, true);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectLayouts', <String, String>{});
|
||||
expect(result, <String, String>{'enabled': 'true'});
|
||||
expect(debugProfileLayoutsEnabled, true);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectLayouts', <String, String>{'enabled': 'false'});
|
||||
expect(result, <String, String>{'enabled': 'false'});
|
||||
expect(debugProfileLayoutsEnabled, false);
|
||||
|
||||
result = await binding.testExtension('profileRenderObjectLayouts', <String, String>{});
|
||||
expect(result, <String, String>{'enabled': 'false'});
|
||||
expect(debugProfileLayoutsEnabled, false);
|
||||
|
||||
expect(binding.frameScheduled, isFalse);
|
||||
});
|
||||
|
||||
test('Service extensions - evict', () async {
|
||||
Map<String, dynamic> result;
|
||||
bool completed;
|
||||
|
|
Loading…
Reference in a new issue