Skip to content

Commit d70fec3

Browse files
committed
Update DisplayList print
1 parent af2b329 commit d70fec3

File tree

3 files changed

+97
-18
lines changed

3 files changed

+97
-18
lines changed

Sources/OpenSwiftUI/Integration/Hosting/UIKit/View/UIHostingView.swift

Lines changed: 60 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -509,13 +509,66 @@ extension _UIHostingView: ViewRendererHost {
509509
package func updateScrollableContainerSize() {
510510
// preconditionFailure("TODO")
511511
}
512-
513-
package func renderDisplayList(_ list: DisplayList, asynchronously: Bool, time: Time, nextTime: Time, targetTimestamp: Time?, version: DisplayList.Version, maxVersion: DisplayList.Version) -> Time {
514-
#if DEBUG
515-
print(list.description)
516-
#endif
517-
// preconditionFailure("TODO")
518-
return .infinity
512+
513+
var shouldDisableUIKitAnimations: Bool {
514+
// FIXME
515+
false
516+
}
517+
518+
package func renderDisplayList(
519+
_ list: DisplayList,
520+
asynchronously: Bool,
521+
time: Time,
522+
nextTime: Time,
523+
targetTimestamp: Time?,
524+
version: DisplayList.Version,
525+
maxVersion: DisplayList.Version
526+
) -> Time {
527+
func render() -> Time {
528+
let scale = window?.screen.scale ?? 1
529+
let environment = DisplayList.ViewRenderer.Environment(contentScale: scale)
530+
return renderer.render(
531+
rootView: self,
532+
from: list,
533+
time: time,
534+
nextTime: nextTime,
535+
version: version,
536+
maxVersion: maxVersion,
537+
environment: environment
538+
)
539+
}
540+
541+
if asynchronously {
542+
if let renderedTime = renderer.renderAsync(
543+
to: list,
544+
time: time,
545+
nextTime: nextTime,
546+
targetTimestamp: targetTimestamp,
547+
version: version,
548+
maxVersion: maxVersion
549+
) {
550+
return renderedTime
551+
} else {
552+
var renderedTime = nextTime
553+
Update.syncMain {
554+
renderedTime = render()
555+
}
556+
return renderedTime
557+
}
558+
} else {
559+
if Self.areAnimationsEnabled, shouldDisableUIKitAnimations {
560+
var renderedTime = nextTime // FIXME
561+
Self.performWithoutAnimation {
562+
renderedTime = render()
563+
}
564+
allowUIKitAnimationsForNextUpdate = false
565+
return renderedTime
566+
} else {
567+
let renderedTime = render()
568+
allowUIKitAnimationsForNextUpdate = false
569+
return renderedTime
570+
}
571+
}
519572
}
520573

521574
package func updateRootView() {

Sources/OpenSwiftUICore/Render/DisplayList/DisplayList.ViewRenderer.swift renamed to Sources/OpenSwiftUICore/Render/DisplayList/DisplayListViewRenderer.swift

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
//
55
// Audited for iOS 18.0
66
// Status: Blocked by ViewUpdater and ViewRasterizer
7-
// ID: 21FFA3C7D88AC65BB559906758271BFC
7+
// ID: 21FFA3C7D88AC65BB559906758271BFC (SwiftUICore)
88

99
package import Foundation
1010

@@ -118,7 +118,13 @@ extension DisplayList {
118118
renderer?.viewCacheIsEmpty ?? true
119119
}
120120
}
121-
121+
}
122+
123+
// MARK: - DisplayList.ViewRasterizer
124+
125+
private var printTree: Bool?
126+
127+
extension DisplayList {
122128
private final class ViewRasterizer: ViewRendererBase {
123129
let platform: DisplayList.ViewUpdater.Platform
124130
weak var host: ViewRendererHost?
@@ -127,27 +133,34 @@ extension DisplayList {
127133
let renderer: DisplayList.GraphicsRenderer
128134
var seed: DisplayList.Seed
129135
var lastContentsScale: CGFloat
130-
136+
131137
init(platform: DisplayList.ViewUpdater.Platform, host: ViewRendererHost?, rootView: AnyObject, options: _RendererConfiguration.RasterizationOptions) {
132138
preconditionFailure("")
133139
}
134-
140+
135141
var exportedObject: AnyObject? {
136142
platform.definition.getRBLayer(drawingView: drawingView!)
137143
}
138-
144+
139145
func render(rootView: AnyObject, from list: DisplayList, time: Time, version: DisplayList.Version, maxVersion: DisplayList.Version, environment: DisplayList.ViewRenderer.Environment) -> Time {
140-
preconditionFailure("TODO")
146+
// preconditionFailure("TODO")
147+
if printTree == nil {
148+
printTree = ProcessEnvironment.bool(forKey: "OPENSWIFTUI_PRINT_TREE")
149+
}
150+
if let printTree, printTree {
151+
print("View \(Unmanaged.passUnretained(rootView).toOpaque()) at \(time):\n\(list.description)")
152+
}
153+
return .zero
141154
}
142-
155+
143156
func renderAsync(to list: DisplayList, time: Time, targetTimestamp: Time?, version: DisplayList.Version, maxVersion: DisplayList.Version) -> Time? {
144157
preconditionFailure("TODO")
145158
}
146-
159+
147160
func destroy(rootView: AnyObject) {
148161
preconditionFailure("TODO")
149162
}
150-
163+
151164
var viewCacheIsEmpty: Bool {
152165
preconditionFailure("TODO")
153166
}

Sources/OpenSwiftUICore/Render/DisplayList/DisplayList.ViewUpdater.swift renamed to Sources/OpenSwiftUICore/Render/DisplayList/DisplayListViewUpdater.swift

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,18 @@
44
//
55
// Audited for iOS 18.0
66
// Status: WIP
7+
// ID: B86250B2E056EB47628ECF46032DFA4C (SwiftUICore)
8+
9+
private var printTree: Bool?
710

811
extension DisplayList {
912
// FIXME
1013
final package class ViewUpdater: ViewRendererBase {
1114
init() {
12-
preconditionFailure("")
15+
// preconditionFailure("TODO")
16+
platform = .init(rawValue: 0)
17+
exportedObject = nil
18+
viewCacheIsEmpty = false
1319
}
1420

1521
init(platform: Platform, exportedObject: AnyObject? = nil, viewCacheIsEmpty: Bool) {
@@ -23,7 +29,14 @@ extension DisplayList {
2329
var exportedObject: AnyObject?
2430

2531
func render(rootView: AnyObject, from list: DisplayList, time: Time, version: DisplayList.Version, maxVersion: DisplayList.Version, environment: DisplayList.ViewRenderer.Environment) -> Time {
26-
.zero
32+
// TODO
33+
if printTree == nil {
34+
printTree = ProcessEnvironment.bool(forKey: "OPENSWIFTUI_PRINT_TREE")
35+
}
36+
if let printTree, printTree {
37+
print("View \(Unmanaged.passUnretained(rootView).toOpaque()) at \(time):\n\(list.description)")
38+
}
39+
return .zero
2740
}
2841

2942
func renderAsync(to list: DisplayList, time: Time, targetTimestamp: Time?, version: DisplayList.Version, maxVersion: DisplayList.Version) -> Time? {

0 commit comments

Comments
 (0)