Scheduling profiler: Canvas views clip by default (#22100)

This commit is contained in:
Brian Vaughn
2021-08-16 13:20:07 -04:00
committed by GitHub
parent bc4e751121
commit 55d01aa0f3
3 changed files with 18 additions and 13 deletions
@@ -118,6 +118,7 @@ export class SnapshotsView extends View {
const visibleArea = this.visibleArea;
// Prevent snapshot from visibly overflowing its container when clipped.
// View clips by default, but since this view may draw async (on Image load) we re-clip.
const shouldClip = !rectEqualToRect(imageRect, visibleArea);
if (shouldClip) {
const clippedRect = intersectionOfRects(imageRect, visibleArea);
@@ -168,18 +168,6 @@ export class SuspenseEventsView extends View {
return; // Not in view
}
const drawableRect = intersectionOfRects(suspenseRect, rect);
// Clip diamonds so they don't overflow if the view has been resized (smaller).
const region = new Path2D();
region.rect(
drawableRect.origin.x,
drawableRect.origin.y,
drawableRect.size.width,
drawableRect.size.height,
);
context.save();
context.clip(region);
context.beginPath();
context.fillStyle = fillStyle;
context.moveTo(xStart, y - halfSize);
@@ -187,7 +175,6 @@ export class SuspenseEventsView extends View {
context.lineTo(xStart, y + halfSize);
context.lineTo(xStart - halfSize, y);
context.fill();
context.restore();
} else {
const xStop = timestampToPosition(
timestamp + duration,
@@ -199,7 +199,24 @@ export class View {
this.layoutSubviews();
if (this._needsDisplay) this._needsDisplay = false;
if (this._subviewsNeedDisplay) this._subviewsNeedDisplay = false;
// Clip anything drawn by the view to prevent it from overflowing its visible area.
const visibleArea = this.visibleArea;
const region = new Path2D();
region.rect(
visibleArea.origin.x,
visibleArea.origin.y,
visibleArea.size.width,
visibleArea.size.height,
);
context.save();
context.clip(region);
context.beginPath();
this.draw(context, viewRefs);
// Stop clipping
context.restore();
}
}