Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(226)

Unified Diff: sky/sdk/lib/rendering/object.dart

Issue 1213473003: Add asserts to catch potential misuses of the rendering framework. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « sky/sdk/lib/rendering/box.dart ('k') | sky/sdk/lib/rendering/stack.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sky/sdk/lib/rendering/object.dart
diff --git a/sky/sdk/lib/rendering/object.dart b/sky/sdk/lib/rendering/object.dart
index 094796673bd773229e0d0bcfdf5756fb265a21d1..25083a2c9a979d1c4216df6db2cb85b8ad825fb8 100644
--- a/sky/sdk/lib/rendering/object.dart
+++ b/sky/sdk/lib/rendering/object.dart
@@ -80,11 +80,20 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
static List<RenderObject> _nodesNeedingLayout = new List<RenderObject>();
static bool _debugDoingLayout = false;
static bool get debugDoingLayout => _debugDoingLayout;
+ bool _debugDoingThisResize = false;
+ bool get debugDoingThisResize => _debugDoingThisResize;
+ bool _debugDoingThisLayout = false;
+ bool get debugDoingThisLayout => _debugDoingThisLayout;
+ static RenderObject _debugActiveLayout = null;
+ static RenderObject get debugActiveLayout => _debugActiveLayout;
+ bool _debugCanParentUseSize;
+ bool get debugCanParentUseSize => _debugCanParentUseSize;
bool _needsLayout = true;
bool get needsLayout => _needsLayout;
RenderObject _relayoutSubtreeRoot;
Constraints _constraints;
Constraints get constraints => _constraints;
+ bool debugDoesMeetConstraints(); // override this in a subclass to verify that your state matches the constraints object
bool debugAncestorsAlreadyMarkedNeedsLayout() {
if (_relayoutSubtreeRoot == null)
return true; // we haven't yet done layout even once, so there's nothing for us to do
@@ -152,7 +161,14 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
void layoutWithoutResize() {
try {
assert(_relayoutSubtreeRoot == this);
+ _debugCanParentUseSize = false;
+ _debugDoingThisLayout = true;
+ RenderObject debugPreviousActiveLayout = _debugActiveLayout;
+ _debugActiveLayout = this;
performLayout();
+ _debugActiveLayout = debugPreviousActiveLayout;
+ _debugDoingThisLayout = false;
+ _debugCanParentUseSize = null;
} catch (e, stack) {
print('Exception raised during layout of ${this}: ${e}');
print(stack);
@@ -172,9 +188,20 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
return;
_constraints = constraints;
_relayoutSubtreeRoot = relayoutSubtreeRoot;
- if (sizedByParent)
+ _debugCanParentUseSize = parentUsesSize;
+ if (sizedByParent) {
+ _debugDoingThisResize = true;
performResize();
+ _debugDoingThisResize = false;
+ }
+ _debugDoingThisLayout = true;
+ RenderObject debugPreviousActiveLayout = _debugActiveLayout;
+ _debugActiveLayout = this;
performLayout();
+ _debugActiveLayout = debugPreviousActiveLayout;
+ _debugDoingThisLayout = false;
+ _debugCanParentUseSize = null;
+ assert(debugDoesMeetConstraints());
_needsLayout = false;
markNeedsPaint();
assert(parent == this.parent); // TODO(ianh): Remove this once the analyzer is cleverer
@@ -250,6 +277,8 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
String toString([String prefix = '']) {
+ RenderObject debugPreviousActiveLayout = _debugActiveLayout;
+ _debugActiveLayout = null;
String header = '${runtimeType}';
if (_relayoutSubtreeRoot != null && _relayoutSubtreeRoot != this) {
int count = 1;
@@ -265,7 +294,9 @@ abstract class RenderObject extends AbstractNode implements HitTestTarget {
if (!attached)
header += ' DETACHED';
prefix += ' ';
- return '${header}\n${debugDescribeSettings(prefix)}${debugDescribeChildren(prefix)}';
+ String result = '${header}\n${debugDescribeSettings(prefix)}${debugDescribeChildren(prefix)}';
+ _debugActiveLayout = debugPreviousActiveLayout;
+ return result;
}
String debugDescribeSettings(String prefix) => '${prefix}parentData: ${parentData}\n${prefix}constraints: ${constraints}\n';
String debugDescribeChildren(String prefix) => '';
« no previous file with comments | « sky/sdk/lib/rendering/box.dart ('k') | sky/sdk/lib/rendering/stack.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698