Attach captured canvas payloads to document snapshots
This commit is contained in:
@@ -119,6 +119,56 @@ void snapshot_plan_defaults_empty_names_and_frames(pp::tests::Harness& harness)
|
||||
PP_EXPECT(harness, result.value().document.frames()[0].duration_ms == 100U);
|
||||
}
|
||||
|
||||
void snapshot_plan_attaches_captured_face_payloads(pp::tests::Harness& harness)
|
||||
{
|
||||
const std::uint32_t frames[] { 100U };
|
||||
const std::uint8_t rgba[] {
|
||||
255U, 0U, 0U, 255U,
|
||||
0U, 255U, 0U, 255U,
|
||||
};
|
||||
const pp::app::DocumentCanvasFacePayloadInput payloads[] {
|
||||
{
|
||||
.frame_index = 0U,
|
||||
.face_index = 2U,
|
||||
.x = 3U,
|
||||
.y = 4U,
|
||||
.width = 2U,
|
||||
.height = 1U,
|
||||
.rgba8 = std::span<const std::uint8_t>(rgba),
|
||||
},
|
||||
};
|
||||
const pp::app::DocumentCanvasLayerSnapshotInput layers[] {
|
||||
{
|
||||
.name = "Paint",
|
||||
.frame_durations_ms = std::span<const std::uint32_t>(frames),
|
||||
.pending_face_payloads = 1U,
|
||||
.captured_face_payloads = std::span<const pp::app::DocumentCanvasFacePayloadInput>(payloads),
|
||||
},
|
||||
};
|
||||
|
||||
const auto result = pp::app::plan_document_canvas_snapshot(pp::app::DocumentCanvasSnapshotInput {
|
||||
.has_canvas = true,
|
||||
.width = 16U,
|
||||
.height = 8U,
|
||||
.layers = std::span<const pp::app::DocumentCanvasLayerSnapshotInput>(layers),
|
||||
});
|
||||
|
||||
PP_EXPECT(harness, result);
|
||||
if (!result) {
|
||||
return;
|
||||
}
|
||||
|
||||
PP_EXPECT(harness, result.value().pending_face_payloads == 1U);
|
||||
PP_EXPECT(harness, result.value().captured_face_payloads == 1U);
|
||||
PP_EXPECT(harness, !result.value().metadata_only);
|
||||
PP_EXPECT(harness, !result.value().requires_renderer_payload_readback);
|
||||
PP_EXPECT(harness, result.value().document.face_pixel_payload_count() == 1U);
|
||||
PP_EXPECT(harness, result.value().document.layers()[0].frames[0].face_pixels[0].face_index == 2U);
|
||||
PP_EXPECT(harness, result.value().document.layers()[0].frames[0].face_pixels[0].x == 3U);
|
||||
PP_EXPECT(harness, result.value().document.layers()[0].frames[0].face_pixels[0].rgba8[4] == 0U);
|
||||
PP_EXPECT(harness, result.value().document.layers()[0].frames[0].face_pixels[0].rgba8[5] == 255U);
|
||||
}
|
||||
|
||||
void snapshot_plan_rejects_invalid_canvas_state(pp::tests::Harness& harness)
|
||||
{
|
||||
const std::uint32_t frames[] { 100U };
|
||||
@@ -168,11 +218,38 @@ void snapshot_plan_rejects_invalid_canvas_state(pp::tests::Harness& harness)
|
||||
.height = 8U,
|
||||
.layers = std::span<const pp::app::DocumentCanvasLayerSnapshotInput>(bad_duration_layers),
|
||||
});
|
||||
const std::uint8_t bad_rgba[] { 1U, 2U, 3U };
|
||||
const pp::app::DocumentCanvasFacePayloadInput bad_payloads[] {
|
||||
{
|
||||
.frame_index = 0U,
|
||||
.face_index = 0U,
|
||||
.x = 0U,
|
||||
.y = 0U,
|
||||
.width = 1U,
|
||||
.height = 1U,
|
||||
.rgba8 = std::span<const std::uint8_t>(bad_rgba),
|
||||
},
|
||||
};
|
||||
const pp::app::DocumentCanvasLayerSnapshotInput bad_payload_layers[] {
|
||||
{
|
||||
.name = "Layer",
|
||||
.frame_durations_ms = std::span<const std::uint32_t>(frames),
|
||||
.pending_face_payloads = 1U,
|
||||
.captured_face_payloads = std::span<const pp::app::DocumentCanvasFacePayloadInput>(bad_payloads),
|
||||
},
|
||||
};
|
||||
const auto bad_payload = pp::app::plan_document_canvas_snapshot(pp::app::DocumentCanvasSnapshotInput {
|
||||
.has_canvas = true,
|
||||
.width = 16U,
|
||||
.height = 8U,
|
||||
.layers = std::span<const pp::app::DocumentCanvasLayerSnapshotInput>(bad_payload_layers),
|
||||
});
|
||||
|
||||
PP_EXPECT(harness, !no_canvas);
|
||||
PP_EXPECT(harness, !bad_layer);
|
||||
PP_EXPECT(harness, !bad_blend);
|
||||
PP_EXPECT(harness, !bad_duration);
|
||||
PP_EXPECT(harness, !bad_payload);
|
||||
}
|
||||
|
||||
void clear_plan_records_legacy_canvas_effects(pp::tests::Harness& harness)
|
||||
@@ -270,6 +347,7 @@ int main()
|
||||
pp::tests::Harness harness;
|
||||
harness.run("snapshot plan projects canvas metadata", snapshot_plan_projects_canvas_metadata);
|
||||
harness.run("snapshot plan defaults empty names and frames", snapshot_plan_defaults_empty_names_and_frames);
|
||||
harness.run("snapshot plan attaches captured face payloads", snapshot_plan_attaches_captured_face_payloads);
|
||||
harness.run("snapshot plan rejects invalid canvas state", snapshot_plan_rejects_invalid_canvas_state);
|
||||
harness.run("clear plan records legacy canvas effects", clear_plan_records_legacy_canvas_effects);
|
||||
harness.run("clear plan noops without canvas", clear_plan_noops_without_canvas);
|
||||
|
||||
Reference in New Issue
Block a user