Route live save snapshots through PPI policy
This commit is contained in:
@@ -78,6 +78,19 @@ struct DocumentCanvasSaveSnapshotReport {
|
||||
bool can_export_ppi = false;
|
||||
};
|
||||
|
||||
enum class DocumentCanvasSaveWriterAction {
|
||||
use_document_ppi_writer,
|
||||
use_legacy_project_save,
|
||||
};
|
||||
|
||||
struct DocumentCanvasSaveWriterRoutePlan {
|
||||
DocumentCanvasSaveWriterAction action = DocumentCanvasSaveWriterAction::use_legacy_project_save;
|
||||
bool payload_complete = false;
|
||||
bool can_export_ppi = false;
|
||||
bool uses_document_ppi_writer = false;
|
||||
std::string_view fallback_reason;
|
||||
};
|
||||
|
||||
struct DocumentCanvasPpiExportResult {
|
||||
DocumentCanvasSaveSnapshotReport report;
|
||||
std::vector<std::byte> bytes;
|
||||
@@ -248,14 +261,31 @@ public:
|
||||
};
|
||||
}
|
||||
|
||||
[[nodiscard]] constexpr DocumentCanvasSaveWriterRoutePlan plan_document_canvas_save_writer_route(
|
||||
DocumentCanvasSaveSnapshotReport report) noexcept
|
||||
{
|
||||
DocumentCanvasSaveWriterRoutePlan plan;
|
||||
plan.payload_complete = report.payload_complete;
|
||||
plan.can_export_ppi = report.can_export_ppi;
|
||||
|
||||
if (!report.payload_complete || !report.can_export_ppi) {
|
||||
plan.fallback_reason = "canvas document snapshot still requires renderer payload readback";
|
||||
return plan;
|
||||
}
|
||||
|
||||
plan.action = DocumentCanvasSaveWriterAction::use_document_ppi_writer;
|
||||
plan.uses_document_ppi_writer = true;
|
||||
return plan;
|
||||
}
|
||||
|
||||
[[nodiscard]] inline pp::foundation::Result<DocumentCanvasPpiExportResult>
|
||||
export_document_canvas_save_snapshot_to_ppi(const DocumentCanvasSnapshotResult& snapshot)
|
||||
{
|
||||
const auto report = make_document_canvas_save_snapshot_report(snapshot);
|
||||
if (!report.can_export_ppi) {
|
||||
const auto route = plan_document_canvas_save_writer_route(report);
|
||||
if (!route.uses_document_ppi_writer) {
|
||||
return pp::foundation::Result<DocumentCanvasPpiExportResult>::failure(
|
||||
pp::foundation::Status::invalid_argument(
|
||||
"canvas document snapshot still requires renderer payload readback"));
|
||||
pp::foundation::Status::invalid_argument(route.fallback_reason.data()));
|
||||
}
|
||||
|
||||
auto bytes = pp::document::export_ppi_project_document(snapshot.document);
|
||||
|
||||
@@ -40,6 +40,32 @@ pp::foundation::Status prepare_legacy_document_save_snapshot(App& app, const cha
|
||||
|
||||
const auto report = pp::app::make_document_canvas_save_snapshot_report(snapshot.value());
|
||||
log_legacy_document_save_snapshot(context, report);
|
||||
const auto route = pp::app::plan_document_canvas_save_writer_route(report);
|
||||
if (!route.uses_document_ppi_writer) {
|
||||
LOG(
|
||||
"%s document save writer retained legacy save: %.*s",
|
||||
context,
|
||||
static_cast<int>(route.fallback_reason.size()),
|
||||
route.fallback_reason.data());
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
const auto exported = pp::app::export_document_canvas_save_snapshot_to_ppi(snapshot.value());
|
||||
if (!exported) {
|
||||
LOG(
|
||||
"%s document save writer retained legacy save after PPI export failure: %s",
|
||||
context,
|
||||
exported.status().message);
|
||||
return exported.status();
|
||||
}
|
||||
|
||||
LOG(
|
||||
"%s document save writer route: document-ppi payloadComplete=%s bytes=%llu capturedFaces=%zu pendingFaces=%zu",
|
||||
context,
|
||||
exported.value().report.payload_complete ? "true" : "false",
|
||||
static_cast<unsigned long long>(exported.value().bytes.size()),
|
||||
exported.value().report.captured_face_payloads,
|
||||
exported.value().report.pending_face_payloads);
|
||||
return pp::foundation::Status::success();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user