Canvas rendering
canvas.rendering
Ready 路 No signal has been run.
Results
Research focus
Selected evidence from this run. Cross-run stability and comparison verdicts require a session comparison.
Full evidence
| Property | Value |
|---|---|
| No results yet. No signal has been run. | |
JSON
Selected signal results for external comparison. Field statuses, controls and exact values are retained.
No run export is available.
Source
Source is not connected yet.
// Test source pending.Reference
Reference is not connected yet.
Definition
Full text rasters, opaque round trips, blank/space controls and sampled copy, crop, rotation, PNG, alpha, P3 and float16 paths retain rendering and conversion evidence.
Find it in the repository
- Collector source
core/signals/canvas/rendering.ts- Export
measurementModule路 Signal object- Field definitions
core/definitions/canvas/rendering.ts- Capture membership
- Product capture 路
common/capture/product.ts - Page registration
app/signals/registry.ts- Field projection
core/results/measurement.ts
Execution contract
- Signal
canvas.rendering- Collector
canvas.rendering- API / surface
- core/signals/canvas/rendering.ts
- Timeout
- 1000 ms
- Companion signals
- None
- Fixture inputs
- Inline owned corpora (listed below)
readback-pattern-0路sha256:3584679cb17a128f00d202a33a4dd8c0de6b0596c25e8cebe3fd28f133cac3c3readback-pattern-1路sha256:521f193f9656a3f00c7dcf3430282e15f5a6fd12c0d212dad5473d1657df8065
Exact request inputs
[
{
"key": "canvas.rendering.opaque-copy",
"inputs": {
"opaque-copy": {
"sourceBacking": [
8,
4
],
"transform": [
1,
0,
0,
1,
0,
0
],
"requested": {
"colorSpace": "srgb",
"willReadFrequently": true
}
}
},
"controls": {
"opaque-copy": [
{
"relationshipId": "E01.opaque-copy",
"class": "required",
"preconditions": [
"opaque sRGB endpoint fixture",
"integer coordinates",
"no interpolation"
]
}
]
}
},
{
"key": "canvas.rendering.opaque-crop",
"inputs": {
"opaque-crop": {
"sourceRect": [
2,
1,
4,
2
],
"requested": {
"colorSpace": "srgb",
"willReadFrequently": true
}
}
},
"controls": {
"opaque-crop": [
{
"relationshipId": "E01.opaque-crop",
"class": "required",
"preconditions": [
"opaque sRGB endpoint fixture",
"integer coordinates",
"no interpolation"
]
}
]
}
},
{
"key": "canvas.rendering.opaque-quarter-turn",
"inputs": {
"opaque-quarter-turn": {
"sourceBacking": [
8,
4
],
"clockwiseDegrees": 90,
"transform": [
0,
1,
-1,
0,
4,
0
],
"requested": {
"colorSpace": "srgb",
"willReadFrequently": true
}
}
},
"controls": {
"opaque-quarter-turn": [
{
"relationshipId": "E01.opaque-quarter-turn",
"class": "required",
"preconditions": [
"opaque sRGB endpoint fixture",
"integer coordinates",
"no interpolation"
]
}
]
}
},
{
"key": "canvas.rendering.png-decoded",
"inputs": {
"png-decoded": {
"comparison": "decoded pixels",
"requested": {
"colorSpace": "srgb",
"willReadFrequently": true
},
"requestedMime": "image/png"
}
},
"controls": {
"png-decoded": [
{
"relationshipId": "E01.png-decoded",
"class": "required",
"preconditions": [
"opaque sRGB endpoint fixture",
"integer coordinates",
"no interpolation"
]
}
]
}
},
{
"key": "canvas.rendering.text",
"inputs": {
"text": {
"text": "A虂 馃Л",
"font": "16px sans-serif",
"position": [
4,
4
],
"transform": [
1,
0,
0,
1,
0,
0
]
}
},
"controls": {}
},
{
"key": "canvas.rendering.text-transformed",
"inputs": {
"text-transformed": {
"text": "A虂 馃Л",
"font": "16px sans-serif",
"position": [
4,
4
],
"transform": [
0,
1,
-1,
0,
64,
0
]
}
},
"controls": {}
},
{
"key": "canvas.rendering.alpha",
"inputs": {
"alpha": {
"colorSpace": "srgb",
"colorType": "unorm8",
"alpha": true
}
},
"controls": {}
},
{
"key": "canvas.rendering.display-p3",
"inputs": {
"display-p3": {
"colorSpace": "display-p3",
"colorType": "unorm8",
"alpha": true
}
},
"controls": {}
},
{
"key": "canvas.rendering.float16",
"inputs": {
"float16": {
"colorSpace": "srgb",
"colorType": "float16",
"alpha": true
}
},
"controls": {}
},
{
"key": "canvas.rendering.pattern-readback",
"inputs": {
"pattern-0-write": {
"revision": "canvas-readback-r1",
"seed": 324508639,
"sha256": "3584679cb17a128f00d202a33a4dd8c0de6b0596c25e8cebe3fd28f133cac3c3",
"width": 8,
"height": 8,
"rgba": [
88,
169,
99,
255,
48,
161,
119,
255,
12,
98,
23,
255,
9,
107,
234,
255,
96,
47,
255,
255,
97,
177,
185,
255,
230,
190,
73,
255,
125,
27,
146,
255,
186,
192,
150,
255,
122,
129,
149,
255,
10,
196,
208,
255,
233,
40,
213,
255,
143,
69,
172,
255,
205,
250,
146,
255,
152,
109,
95,
255,
76,
93,
80,
255,
218,
9,
224,
255,
219,
29,
58,
255,
144,
153,
164,
255,
121,
255,
207,
255,
213,
232,
185,
255,
131,
243,
98,
255,
70,
69,
239,
255,
125,
139,
114,
255,
103,
173,
1,
255,
195,
117,
0,
255,
124,
91,
16,
255,
66,
99,
170,
255,
38,
126,
166,
255,
218,
175,
54,
255,
206,
149,
96,
255,
189,
239,
95,
255,
196,
139,
98,
255,
206,
213,
132,
255,
130,
99,
108,
255,
121,
223,
201,
255,
17,
106,
155,
255,
180,
16,
74,
255,
221,
184,
210,
255,
65,
162,
200,
255,
228,
201,
71,
255,
43,
46,
5,
255,
149,
43,
54,
255,
61,
51,
191,
255,
135,
99,
193,
255,
245,
136,
247,
255,
1,
225,
87,
255,
205,
207,
82,
255,
134,
108,
209,
255,
154,
193,
31,
255,
29,
27,
190,
255,
228,
66,
117,
255,
251,
212,
105,
255,
129,
49,
181,
255,
134,
110,
129,
255,
200,
203,
192,
255,
179,
15,
199,
255,
239,
32,
143,
255,
0,
238,
22,
255,
90,
213,
228,
255,
201,
88,
4,
255,
206,
43,
34,
255,
41,
219,
57,
255,
100,
253,
187,
255
]
},
"pattern-0-read-0": {
"revision": "canvas-readback-r1",
"seed": 324508639,
"sha256": "3584679cb17a128f00d202a33a4dd8c0de6b0596c25e8cebe3fd28f133cac3c3",
"width": 8,
"height": 8,
"rgba": [
88,
169,
99,
255,
48,
161,
119,
255,
12,
98,
23,
255,
9,
107,
234,
255,
96,
47,
255,
255,
97,
177,
185,
255,
230,
190,
73,
255,
125,
27,
146,
255,
186,
192,
150,
255,
122,
129,
149,
255,
10,
196,
208,
255,
233,
40,
213,
255,
143,
69,
172,
255,
205,
250,
146,
255,
152,
109,
95,
255,
76,
93,
80,
255,
218,
9,
224,
255,
219,
29,
58,
255,
144,
153,
164,
255,
121,
255,
207,
255,
213,
232,
185,
255,
131,
243,
98,
255,
70,
69,
239,
255,
125,
139,
114,
255,
103,
173,
1,
255,
195,
117,
0,
255,
124,
91,
16,
255,
66,
99,
170,
255,
38,
126,
166,
255,
218,
175,
54,
255,
206,
149,
96,
255,
189,
239,
95,
255,
196,
139,
98,
255,
206,
213,
132,
255,
130,
99,
108,
255,
121,
223,
201,
255,
17,
106,
155,
255,
180,
16,
74,
255,
221,
184,
210,
255,
65,
162,
200,
255,
228,
201,
71,
255,
43,
46,
5,
255,
149,
43,
54,
255,
61,
51,
191,
255,
135,
99,
193,
255,
245,
136,
247,
255,
1,
225,
87,
255,
205,
207,
82,
255,
134,
108,
209,
255,
154,
193,
31,
255,
29,
27,
190,
255,
228,
66,
117,
255,
251,
212,
105,
255,
129,
49,
181,
255,
134,
110,
129,
255,
200,
203,
192,
255,
179,
15,
199,
255,
239,
32,
143,
255,
0,
238,
22,
255,
90,
213,
228,
255,
201,
88,
4,
255,
206,
43,
34,
255,
41,
219,
57,
255,
100,
253,
187,
255
]
},
"pattern-0-read-1": {
"revision": "canvas-readback-r1",
"seed": 324508639,
"sha256": "3584679cb17a128f00d202a33a4dd8c0de6b0596c25e8cebe3fd28f133cac3c3",
"width": 8,
"height": 8,
"rgba": [
88,
169,
99,
255,
48,
161,
119,
255,
12,
98,
23,
255,
9,
107,
234,
255,
96,
47,
255,
255,
97,
177,
185,
255,
230,
190,
73,
255,
125,
27,
146,
255,
186,
192,
150,
255,
122,
129,
149,
255,
10,
196,
208,
255,
233,
40,
213,
255,
143,
69,
172,
255,
205,
250,
146,
255,
152,
109,
95,
255,
76,
93,
80,
255,
218,
9,
224,
255,
219,
29,
58,
255,
144,
153,
164,
255,
121,
255,
207,
255,
213,
232,
185,
255,
131,
243,
98,
255,
70,
69,
239,
255,
125,
139,
114,
255,
103,
173,
1,
255,
195,
117,
0,
255,
124,
91,
16,
255,
66,
99,
170,
255,
38,
126,
166,
255,
218,
175,
54,
255,
206,
149,
96,
255,
189,
239,
95,
255,
196,
139,
98,
255,
206,
213,
132,
255,
130,
99,
108,
255,
121,
223,
201,
255,
17,
106,
155,
255,
180,
16,
74,
255,
221,
184,
210,
255,
65,
162,
200,
255,
228,
201,
71,
255,
43,
46,
5,
255,
149,
43,
54,
255,
61,
51,
191,
255,
135,
99,
193,
255,
245,
136,
247,
255,
1,
225,
87,
255,
205,
207,
82,
255,
134,
108,
209,
255,
154,
193,
31,
255,
29,
27,
190,
255,
228,
66,
117,
255,
251,
212,
105,
255,
129,
49,
181,
255,
134,
110,
129,
255,
200,
203,
192,
255,
179,
15,
199,
255,
239,
32,
143,
255,
0,
238,
22,
255,
90,
213,
228,
255,
201,
88,
4,
255,
206,
43,
34,
255,
41,
219,
57,
255,
100,
253,
187,
255
]
},
"pattern-1-write": {
"revision": "canvas-readback-r1",
"seed": 610839776,
"sha256": "521f193f9656a3f00c7dcf3430282e15f5a6fd12c0d212dad5473d1657df8065",
"width": 8,
"height": 8,
"rgba": [
172,
223,
133,
255,
84,
253,
47,
255,
150,
153,
166,
255,
131,
50,
28,
255,
72,
74,
187,
255,
228,
110,
54,
255,
9,
212,
81,
255,
97,
222,
125,
255,
181,
150,
160,
255,
56,
211,
85,
255,
221,
53,
102,
255,
94,
113,
121,
255,
67,
221,
44,
255,
251,
36,
139,
255,
103,
90,
137,
255,
80,
235,
220,
255,
204,
72,
253,
255,
164,
214,
51,
255,
143,
100,
17,
255,
171,
227,
233,
255,
129,
170,
16,
255,
72,
35,
70,
255,
68,
150,
249,
255,
165,
179,
95,
255,
105,
133,
139,
255,
86,
200,
237,
255,
91,
235,
73,
255,
218,
196,
194,
255,
159,
248,
110,
255,
55,
1,
192,
255,
134,
105,
120,
255,
143,
76,
127,
255,
140,
133,
112,
255,
28,
200,
69,
255,
79,
44,
161,
255,
234,
56,
149,
255,
190,
191,
101,
255,
94,
180,
149,
255,
67,
104,
150,
255,
200,
47,
198,
255,
20,
73,
212,
255,
70,
244,
58,
255,
187,
208,
20,
255,
250,
203,
142,
255,
91,
177,
196,
255,
30,
61,
169,
255,
236,
49,
169,
255,
21,
135,
86,
255,
157,
18,
192,
255,
229,
170,
241,
255,
42,
55,
30,
255,
45,
255,
165,
255,
182,
148,
176,
255,
4,
237,
122,
255,
141,
134,
100,
255,
14,
124,
68,
255,
242,
33,
10,
255,
217,
75,
243,
255,
100,
199,
92,
255,
224,
231,
155,
255,
205,
242,
91,
255,
2,
54,
199,
255,
25,
61,
0,
255,
60,
160,
187,
255
]
},
"pattern-1-read-0": {
"revision": "canvas-readback-r1",
"seed": 610839776,
"sha256": "521f193f9656a3f00c7dcf3430282e15f5a6fd12c0d212dad5473d1657df8065",
"width": 8,
"height": 8,
"rgba": [
172,
223,
133,
255,
84,
253,
47,
255,
150,
153,
166,
255,
131,
50,
28,
255,
72,
74,
187,
255,
228,
110,
54,
255,
9,
212,
81,
255,
97,
222,
125,
255,
181,
150,
160,
255,
56,
211,
85,
255,
221,
53,
102,
255,
94,
113,
121,
255,
67,
221,
44,
255,
251,
36,
139,
255,
103,
90,
137,
255,
80,
235,
220,
255,
204,
72,
253,
255,
164,
214,
51,
255,
143,
100,
17,
255,
171,
227,
233,
255,
129,
170,
16,
255,
72,
35,
70,
255,
68,
150,
249,
255,
165,
179,
95,
255,
105,
133,
139,
255,
86,
200,
237,
255,
91,
235,
73,
255,
218,
196,
194,
255,
159,
248,
110,
255,
55,
1,
192,
255,
134,
105,
120,
255,
143,
76,
127,
255,
140,
133,
112,
255,
28,
200,
69,
255,
79,
44,
161,
255,
234,
56,
149,
255,
190,
191,
101,
255,
94,
180,
149,
255,
67,
104,
150,
255,
200,
47,
198,
255,
20,
73,
212,
255,
70,
244,
58,
255,
187,
208,
20,
255,
250,
203,
142,
255,
91,
177,
196,
255,
30,
61,
169,
255,
236,
49,
169,
255,
21,
135,
86,
255,
157,
18,
192,
255,
229,
170,
241,
255,
42,
55,
30,
255,
45,
255,
165,
255,
182,
148,
176,
255,
4,
237,
122,
255,
141,
134,
100,
255,
14,
124,
68,
255,
242,
33,
10,
255,
217,
75,
243,
255,
100,
199,
92,
255,
224,
231,
155,
255,
205,
242,
91,
255,
2,
54,
199,
255,
25,
61,
0,
255,
60,
160,
187,
255
]
}
},
"controls": {
"pattern-0-read-0": [
"opaque readback / unchanged read / changed pattern"
],
"pattern-0-read-1": [
"opaque readback / unchanged read / changed pattern"
],
"pattern-1-read-0": [
"opaque readback / unchanged read / changed pattern"
]
}
},
{
"key": "canvas.rendering.space-readback",
"inputs": {
"space-before": {
"revision": "canvas-readback-r1",
"width": 8,
"height": 8,
"phase": "space-before"
},
"space-after": {
"revision": "canvas-readback-r1",
"width": 8,
"height": 8,
"phase": "space-after"
}
},
"controls": {
"space-after": [
"blank and space have zero ink"
]
}
}
]One collector runs per invocation. Results and JSON select this signal鈥檚 fields; any companions execute in the same collector.
Generated source manifest lists runtime files, fixture URLs and content digests for this build. The Source tab provides a copyable console sample.
Run and edit locally
From the repository root, start the Astro app, then open /signals/canvas.rendering. Edit the collector source and reload the page to load its new build.
pnpm run dev:webIn a browser module served by this repository鈥檚 Vite graph:
import { createCollector } from "/core/collect"
import { measurementModule } from "/core/signals/canvas/rendering"
const signal = measurementModule
const collector = createCollector()
const suite = { signals: [signal] }
const result = await collector.collect(suite)Reuse the collector owner for repeated calls so collection can enforce cleanup. This returns the collector鈥檚 raw result; app/signals/projection.ts selects the retained fields shown on this page.
rg -n 'measurementModule' core app tests
pnpm run check
pnpm run test tests/unit/app/focused-projection.test.ts| Property | Value |
|---|