Inline frequently used scene and UI state accessors to reduce function
call overhead during layout, rendering, and rich-text traversal.
Add string-view numeric conversion support and parse CSS length values
without temporary number or unit strings. Preserve existing string
overloads for compatibility and keep CSS function parsing unchanged.
Add focused parsing coverage and benchmarks. Full-suite profiling showed
substantial reductions in layout invalidation, whitespace traversal, and
CSS length parsing costs.
Resolve standard property definitions and data-attribute classification
when selectors are parsed, avoiding repeated specification lookups and
attribute-name checks during matching.
Fast-path existence-only data selectors without retrieving their values,
while preserving all attribute operator behavior. Add standard-property
coverage and an attribute-focused benchmark showing a 41.7% reduction
in matching time.
Add a fast path that directly evaluates selectors containing one rule,
avoiding combinator traversal and switch overhead for common class, ID,
tag, and pseudo-class selectors.
Move complex selector traversal into a dedicated function and cache rule
counts in selector loops. Add focused matching coverage and document the
Phase 7 benchmark results.
Index class-anchored selectors by one mandatory class hash so widgets
only evaluate rules associated with their own classes instead of
scanning every class-only rule in the global bucket.
Preserve selector correctness by validating the complete rule after
candidate lookup, and retain stylesheet source order across independent
index buckets for equal-specificity cascade resolution.
Update index clearing, copying, marker removal, and style insertion
paths. Add focused candidate coverage and a legacy full-scan benchmark,
showing a 63% lookup-time reduction on a class-heavy stylesheet.
Cache tag, ID, and class hashes in selector rules and widgets to avoid
repeated string comparisons during selector matching.
Store widget class hashes in a single-element SmallVector so the common
zero and one-class cases remain allocation-free. Reorder UINode and
UIWidget members to recover padding, keeping UIWidget at its original
1144-byte size.
Add selector matching benchmarks and regression coverage for class
mutation, compound selectors, and hash cache synchronization. Document
the measured Phase 5 performance and memory results.
Apply @font-face weights to loaded variable fonts, preserve author
font-family names for internal font-face aliases, and re-resolve text fonts
when style or weight changes after initial font selection.
Also updates the font-weight native variant plan to reflect the current
architecture and remaining work around static native weight variants.
Resolve CSS variable values at the points where properties are applied,
inherited, propagated, and used to seed transitions. This prevents raw
var() values from leaking into widget state or transition start/end
values when style attributes, inherited properties, or state-dependent
rules are involved.
Also refresh style definitions when widgets load so selector-dependent
rules are evaluated with the final widget context, and add regression
coverage for inline style vars, inherited vars, parent-state child rules,
tab close opacity, and foreground tint transitions.
Use poll() for POSIX TcpSocket timed connects instead of select().
select() cannot safely handle descriptor values >= FD_SETSIZE, so a
process with many open sockets/resources could fail new HTTPS requests
even when only one socket was being waited on. This showed up in the
HTML compat module when loading request-heavy pages such as old Reddit.
Keep the Windows path on select(), since Winsock does not use nfds as a
POSIX descriptor limit and this code only waits on one socket.
Also initialize HttpConnection::mIsKeepAlive in the TcpSocket-taking
constructor, matching the default constructor and avoiding undefined
connection lifetime state.
Add a regression test that reserves file descriptors past FD_SETSIZE and
verifies a timed localhost TcpSocket connect still succeeds.
- Treat drawable ref "none" as clearing the layer drawable instead of
trying to load it as a drawable/image reference.
- Round the scroll view inner width up before deciding horizontal
scrollbar visibility, avoiding fractional pixel overflow from creating
a bogus horizontal scrollbar.
Preserve shrink-to-fit widths for floated HTML boxes whose CSS width is
auto, instead of letting their own block layout expand them back to the
containing block width. This matches the CSS float model and fixes floated
list-item menus where hover boxes were much wider than their content.
Also separate RichText visual font metrics from CSS line-box metrics. Text
runs now keep native font height for drawing while line layout still uses
CSS line-height, allowing the expected half-leading offset for vertically
centered text in block anchors.
Add CSS box-sizing support for HTML widgets and route CSS-specified
width/height conversion through virtual sizing hooks. Resolve percentage
CSS sizes against the containing block content box, and apply content-box
or border-box conversion consistently across block, flex, grid, table,
and rich text layout paths.
Keep table wrapper width behavior compatible with CSS table layout by
overriding the table width conversion separately, so padded percentage
tables do not overflow their assigned wrapper width.
Add focused regressions for block padding, flex-basis sizing, grid
containers, table containers, and the border rendering cases that depend
on explicit border-box sizing.
/** Enables or disables focus highlighting in this scene and embedded UI scenes. */
void setHighlightFocusRecursive( bool highlight );
/** Enables or disables box debug drawing in this scene and embedded UI scenes. */
void setDrawBoxesRecursive( bool draw );
/** Enables or disables debug-data drawing in this scene and embedded UI scenes. */
void setDrawDebugDataRecursive( bool debug );
Added control over the UISceneNode children and added setHighlightOverRecursive. This allows us to inspect nested UISceneNodes.
Fix hit-box bug when changing display.
Move UIWebView documents into isolated UISceneNode instances, keep document viewport and extent metrics synchronized, and fix shrink/grow behavior after navigation, async CSS, and viewport changes. Scope author styles and font-face resources per document scene, ignore stale async callbacks after navigation or destruction, and add deterministic coverage for CSS, fonts, images, cookies, hit testing, and document extent updates.
Fixes in UIWebView -> doc -> html -> body resizing issues. Added a few tests to catch regressions.