Reuse panel frame composition in native XCUI shell

This commit is contained in:
2026-04-05 17:41:31 +08:00
parent 63b5f12b93
commit 3db09ea5d0
10 changed files with 651 additions and 954 deletions

View File

@@ -202,4 +202,47 @@ TEST(NewEditorXCUIDemoPanelTest, ClearingHostedPreviewPresenterDoesNotRestoreImG
EXPECT_EQ(stats.flushedCommandCount, 0u);
}
TEST(NewEditorXCUIDemoPanelTest, ComposeFrameBuildsShellAgnosticFrameState) {
auto previewPresenter = std::make_unique<RecordingHostedPreviewPresenter>();
RecordingHostedPreviewPresenter* previewPresenterPtr = previewPresenter.get();
auto canvasHost = std::make_unique<StubCanvasHost>();
StubCanvasHost* canvasHostPtr = canvasHost.get();
XCUIDemoPanel panel(nullptr, std::move(previewPresenter));
panel.SetCanvasHost(std::move(canvasHost));
const XCEngine::NewEditor::XCUIDemoPanelFrameComposition& composition =
panel.ComposeFrame(XCEngine::NewEditor::XCUIDemoPanelFrameComposeOptions{
512.0f,
24.0f,
true,
false,
false,
123456u,
"XCUIDemoTestCanvas"});
EXPECT_EQ(&composition, &panel.GetLastFrameComposition());
ASSERT_NE(composition.frame, nullptr);
EXPECT_TRUE(composition.hostedPreviewEnabled);
EXPECT_FALSE(composition.nativeHostedPreview);
EXPECT_FALSE(composition.hasHostedSurfaceDescriptor);
EXPECT_FALSE(composition.showHostedSurfaceImage);
EXPECT_EQ(composition.previewPathLabel, "hosted presenter");
EXPECT_EQ(composition.previewStateLabel, "live");
EXPECT_EQ(composition.inputSnapshot.timestampNanoseconds, 123456u);
EXPECT_EQ(composition.canvasSession.canvasRect.width, canvasHostPtr->session.canvasRect.width);
EXPECT_EQ(composition.canvasSession.canvasRect.height, canvasHostPtr->session.canvasRect.height);
EXPECT_EQ(composition.input.canvasRect.width, canvasHostPtr->session.canvasRect.width);
EXPECT_EQ(composition.input.canvasRect.height, canvasHostPtr->session.canvasRect.height);
EXPECT_EQ(canvasHostPtr->beginCanvasCallCount, 1u);
EXPECT_EQ(canvasHostPtr->endCanvasCallCount, 1u);
EXPECT_FLOAT_EQ(canvasHostPtr->lastRequest.height, 512.0f);
EXPECT_FLOAT_EQ(canvasHostPtr->lastRequest.topInset, 24.0f);
EXPECT_STREQ(canvasHostPtr->lastRequest.childId, "XCUIDemoTestCanvas");
EXPECT_EQ(previewPresenterPtr->presentCallCount, 1u);
EXPECT_EQ(previewPresenterPtr->lastDebugName, "XCUI Demo");
EXPECT_EQ(composition.previewStats.submittedDrawListCount, panel.GetLastPreviewStats().submittedDrawListCount);
EXPECT_EQ(composition.previewStats.submittedCommandCount, panel.GetLastPreviewStats().submittedCommandCount);
}
} // namespace