@@ -55,6 +55,7 @@ struct clip_scene_counts final {
5555 uint32_t inset_clip_ends{};
5656 uint32_t clipped_fills{};
5757 uint32_t blur_filter_begins{};
58+ uint32_t functional_blur_begins{};
5859 uint32_t command_count{};
5960 bool transform_clip_nested{};
6061 bool compound_filter_ordered{};
@@ -137,6 +138,10 @@ clip_scene_counts wait_for_inset_clip_scene(webscene_engine* engine, uint32_t ex
137138 && (command.flags & (1U << 28U )) != 0U
138139 && std::abs (command.stroke_width - 2 .0F ) < 0 .01F ) {
139140 ++latest.blur_filter_begins ;
141+ } else if (command.kind == 30U
142+ && (command.flags & (1U << 28U )) != 0U
143+ && std::abs (command.stroke_width - 4 .0F ) < 0 .01F ) {
144+ ++latest.functional_blur_begins ;
140145 }
141146 }
142147 webscene_scene_acknowledge_v3 (lease);
@@ -209,6 +214,7 @@ int main()
209214 clip-path: inset(0px 1px); filter: brightness(0.5); backdrop-filter: blur(1px); }
210215 #effects.alternate > span { clip-path: circle(25%); filter: contrast(2); }
211216 #effects > span:first-child { transform: scale(1.25) rotate(3deg); }
217+ #functional-blur { filter: blur(max(4px, calc(8px * 0.25))); }
212218 #compound-filter { filter: blur(2px) saturate(1.08) contrast(1.5) grayscale(0.25); }
213219 #effects > span:last-child { filter: blur(2px); }
214220 `;
@@ -218,6 +224,7 @@ int main()
218224 const fragment = document.createDocumentFragment();
219225 for (let index = 0; index < 4096; index++) fragment.appendChild(document.createElement('span'));
220226 host.appendChild(fragment);
227+ host.children[4093].id = 'functional-blur';
221228 host.children[4094].id = 'compound-filter';
222229 document.body.appendChild(host);
223230 const first = host.firstElementChild;
@@ -235,6 +242,10 @@ int main()
235242 !== 'blur(2px) saturate(1.08) contrast(1.5) grayscale(0.25)') {
236243 throw new Error('initial compound filter list failed');
237244 }
245+ if (getComputedStyle(document.getElementById('functional-blur')).getPropertyValue('filter')
246+ !== 'blur(max(4px, calc(8px * 0.25)))') {
247+ throw new Error('initial functional blur value failed');
248+ }
238249 })()
239250 )JS" , " native-effects-fixture.js" );
240251
@@ -305,6 +316,8 @@ int main()
305316 " retained scene did not emit both bounded foreground blur groups" );
306317 require (initial_clip_scene.compound_filter_ordered ,
307318 " retained scene did not preserve compound foreground filter order" );
319+ require (initial_clip_scene.functional_blur_begins == 1U ,
320+ " retained scene did not resolve the functional blur radius" );
308321 const auto initial_scene_command_bytes =
309322 static_cast <uint64_t >(initial_clip_scene.command_count )
310323 * sizeof (webscene_scene_command);
@@ -417,6 +430,7 @@ int main()
417430 << " clip-ends=" << initial_clip_scene.inset_clip_ends
418431 << " clipped-fills=" << initial_clip_scene.clipped_fills
419432 << " blur-filter-begins=" << initial_clip_scene.blur_filter_begins
433+ << " functional-blur-begins=" << initial_clip_scene.functional_blur_begins
420434 << " compound-filter-ordered=" << initial_clip_scene.compound_filter_ordered
421435 << " transform-clip-nested=" << initial_clip_scene.transform_clip_nested
422436 << " initial-scene-command-bytes=" << initial_scene_command_bytes
0 commit comments