Performance fixture: real-world Rust file pair from mozilla/firefox (gfx/wr/webrender/src/prim_store/borders.rs, commit df7d2a75c2957f99765a015f6cfbd3ba6ef36ec9) that takes diff_code roughly 840ms on a combined AST of 4916 nodes (~11.6KB per file) - notably faster relative to its size than the other large fixtures here, included as a less extreme large-size data point. Captured via research/diff_pairs_benchmark_rust.csv.

This mapping has 4 multi-map groups: several pairings are equally correct there. The code view shows one arbitrary valid pairing, not the only one.

Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–62 unchanged (62 lines)
63 pub fn update(
64 &mut self,
65 common: &mut PrimTemplateCommonData,
66 frame_state: &mut FrameBuildingState,
67 ) {
68 let mut writer = frame_state.frame_gpu_data.f32.write_blocks(3 + self.brush_segments.len() * VECS_PER_SEGMENT);
69 self.write_prim_gpu_blocks(&mut writer, common.prim_rect.size());
70 self.write_segment_gpu_blocks(&mut writer);
71 common.gpu_buffer_address = writer.finish();
72 common.opacity = PrimitiveOpacity::translucent();
73 }
74
75 fn write_prim_gpu_blocks(
…lines 76–109 unchanged (34 lines)
110 border.normalize(&widths);
111
112 let mut brush_segments = Vec::new();
113 let mut border_segments = Vec::new();
114
115 create_border_segments(
116 common.prim_rect.size(),
117 &border,
118 &widths,
119 &mut border_segments,
120 &mut brush_segments,
121 );
122
…lines 123–232 unchanged (110 lines)
233 pub fn update(
234 &mut self,
235 common: &mut PrimTemplateCommonData,
236 frame_state: &mut FrameBuildingState,
237 ) {
238 let mut writer = frame_state.frame_gpu_data.f32.write_blocks(3 + self.brush_segments.len() * VECS_PER_SEGMENT);
239 self.write_prim_gpu_blocks(&mut writer, &common.prim_rect.size());
240 self.write_segment_gpu_blocks(&mut writer);
241 common.gpu_buffer_address = writer.finish();
242
243 let frame_id = frame_state.rg_builder.frame_id();
244 if self.frame_id != frame_id {
245 self.frame_id = frame_id;
…lines 246–294 unchanged (49 lines)
295pub type ImageBorderTemplate = PrimTemplate<ImageBorderData>;
296
297impl From<ImageBorderKey> for ImageBorderTemplate {
298 fn from(key: ImageBorderKey) -> Self {
299 let common = PrimTemplateCommonData::with_key_common(key.common);
300
301 let brush_segments = key.kind.nine_patch.create_brush_segments(common.prim_rect.size());
302 ImageBorderTemplate {
303 common,
304 kind: ImageBorderData {
305 request: key.kind.request,
306 brush_segments,
307 src_color: None,
…lines 308–356 unchanged (49 lines)
357 // talos stress tests. If you get a failure here on CI, there's two possibilities:
358 // (a) You made a structure smaller than it currently is. Great work! Update the
359 // test expectations and move on.
360 // (b) You made a structure larger. This is not necessarily a problem, but should only
361 // be done with care, and after checking if talos performance regresses badly.
362 assert_eq!(mem::size_of::<NormalBorderPrim>(), 84, "NormalBorderPrim size changed");
363 assert_eq!(mem::size_of::<NormalBorderTemplate>(), 216, "NormalBorderTemplate size changed");
364 assert_eq!(mem::size_of::<NormalBorderKey>(), 104, "NormalBorderKey size changed");
365 assert_eq!(mem::size_of::<ImageBorder>(), 68, "ImageBorder size changed");
366 assert_eq!(mem::size_of::<ImageBorderTemplate>(), 104, "ImageBorderTemplate size changed");
367 assert_eq!(mem::size_of::<ImageBorderKey>(), 88, "ImageBorderKey size changed");
368}
369

After

…lines 1–62 unchanged (62 lines)
63 pub fn update(
64 &mut self,
65 common: &mut PrimTemplateCommonData,
66 frame_state: &mut FrameBuildingState,
67 ) {
68 let mut writer = frame_state.frame_gpu_data.f32.write_blocks(3 + self.brush_segments.len() * VECS_PER_SEGMENT);
69 self.write_prim_gpu_blocks(&mut writer, common.prim_size);
70 self.write_segment_gpu_blocks(&mut writer);
71 common.gpu_buffer_address = writer.finish();
72 common.opacity = PrimitiveOpacity::translucent();
73 }
74
75 fn write_prim_gpu_blocks(
…lines 76–109 unchanged (34 lines)
110 border.normalize(&widths);
111
112 let mut brush_segments = Vec::new();
113 let mut border_segments = Vec::new();
114
115 create_border_segments(
116 common.prim_size,
117 &border,
118 &widths,
119 &mut border_segments,
120 &mut brush_segments,
121 );
122
…lines 123–232 unchanged (110 lines)
233 pub fn update(
234 &mut self,
235 common: &mut PrimTemplateCommonData,
236 frame_state: &mut FrameBuildingState,
237 ) {
238 let mut writer = frame_state.frame_gpu_data.f32.write_blocks(3 + self.brush_segments.len() * VECS_PER_SEGMENT);
239 self.write_prim_gpu_blocks(&mut writer, &common.prim_size);
240 self.write_segment_gpu_blocks(&mut writer);
241 common.gpu_buffer_address = writer.finish();
242
243 let frame_id = frame_state.rg_builder.frame_id();
244 if self.frame_id != frame_id {
245 self.frame_id = frame_id;
…lines 246–294 unchanged (49 lines)
295pub type ImageBorderTemplate = PrimTemplate<ImageBorderData>;
296
297impl From<ImageBorderKey> for ImageBorderTemplate {
298 fn from(key: ImageBorderKey) -> Self {
299 let common = PrimTemplateCommonData::with_key_common(key.common);
300
301 let brush_segments = key.kind.nine_patch.create_brush_segments(common.prim_size);
302 ImageBorderTemplate {
303 common,
304 kind: ImageBorderData {
305 request: key.kind.request,
306 brush_segments,
307 src_color: None,
…lines 308–356 unchanged (49 lines)
357 // talos stress tests. If you get a failure here on CI, there's two possibilities:
358 // (a) You made a structure smaller than it currently is. Great work! Update the
359 // test expectations and move on.
360 // (b) You made a structure larger. This is not necessarily a problem, but should only
361 // be done with care, and after checking if talos performance regresses badly.
362 assert_eq!(mem::size_of::<NormalBorderPrim>(), 84, "NormalBorderPrim size changed");
363 assert_eq!(mem::size_of::<NormalBorderTemplate>(), 208, "NormalBorderTemplate size changed");
364 assert_eq!(mem::size_of::<NormalBorderKey>(), 96, "NormalBorderKey size changed");
365 assert_eq!(mem::size_of::<ImageBorder>(), 68, "ImageBorder size changed");
366 assert_eq!(mem::size_of::<ImageBorderTemplate>(), 96, "ImageBorderTemplate size changed");
367 assert_eq!(mem::size_of::<ImageBorderKey>(), 80, "ImageBorderKey size changed");
368}
369

Before

source_file
block_comment
/* "/*"
*/ "*/"
use_declaration
use "use"
scoped_use_list
identifier "api"
:: "::"
use_list
{ "{"
identifier "NormalBorder"
, ","
identifier "PremultipliedColorF"
, ","
identifier "Shadow"
, ","
identifier "RasterSpace"
} "}"
; ";"
use_declaration
use "use"
use_wildcard
scoped_identifier
identifier "api"
:: "::"
identifier "units"
:: "::"
* "*"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "border"
:: "::"
identifier "create_border_segments"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "border"
:: "::"
identifier "NormalBorderAu"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "gpu_types"
:: "::"
identifier "ImageBrushPrimitiveData"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "renderer"
:: "::"
identifier "GpuBufferWriterF"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
crate "crate"
:: "::"
identifier "scene_building"
:: "::"
use_list
{ "{"
identifier "CreateShadow"
, ","
identifier "IsVisible"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "frame_builder"
:: "::"
identifier "FrameBuildingState"
; ";"
use_declaration
use "use"
scoped_identifier
crate "crate"
:: "::"
identifier "intern"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
crate "crate"
:: "::"
identifier "internal_types"
:: "::"
use_list
{ "{"
identifier "LayoutPrimitiveInfo"
, ","
identifier "FrameId"
} "}"
; ";"
use_declaration (+33 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "resource_cache"
:: "::"
identifier "ImageRequest"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "render_task"
:: "::"
identifier "RenderTask"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "render_task_graph"
:: "::"
identifier "RenderTaskId"
; ";"
use_declaration
use "use"
scoped_identifier
super "super"
:: "::"
identifier "storage"
; ";"
attribute_item (+21 nodes collapsed)
attribute_item (+21 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Eq"
, ","
identifier "MallocSizeOf"
, ","
identifier "PartialEq"
, ","
identifier "Hash"
) ")"
] "]"
struct_item (+22 nodes collapsed)
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "NormalBorderKey"
= "="
generic_type
type_identifier "PrimKey"
type_arguments
< "<"
type_identifier "NormalBorderPrim"
> ">"
; ";"
impl_item (+53 nodes collapsed)
impl_item
impl "impl"
scoped_type_identifier
identifier "intern"
:: "::"
type_identifier "InternDebug"
for "for"
type_identifier "NormalBorderKey"
declaration_list
{ "{"
} "}"
attribute_item (+21 nodes collapsed)
attribute_item (+21 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "MallocSizeOf"
) ")"
] "]"
struct_item (+46 nodes collapsed)
impl_item
impl "impl"
type_identifier "NormalBorderData"
declaration_list
{ "{"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Update the GPU cache for a given primitive template. This m"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " times per frame, by each primitive reference that refers to"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " template. The initial request call to the GPU cache ensures"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " done if the cache entry is invalid (due to first use or evi"...
function_item
visibility_modifier
pub "pub"
fn "fn"
identifier "update"
parameters (+24 nodes collapsed)
block
{ "{"
let_declaration (+37 nodes collapsed)
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "write_prim_gpu_blocks"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "writer"
, ","
call_expression
field_expression any 2:1
field_expression any 2:1
identifier "common"
. "."
field_identifier "prim_rect"
. "."
field_identifier "size"
arguments
( "("
) ")"
) ")"
; ";"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "write_segment_gpu_blocks"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "writer"
) ")"
; ";"
expression_statement
assignment_expression
field_expression
identifier "common"
. "."
field_identifier "gpu_buffer_address"
= "="
call_expression
field_expression
identifier "writer"
. "."
field_identifier "finish"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
field_expression
identifier "common"
. "."
field_identifier "opacity"
= "="
call_expression
scoped_identifier
identifier "PrimitiveOpacity"
:: "::"
identifier "translucent"
arguments
( "("
) ")"
; ";"
} "}"
function_item (+69 nodes collapsed)
function_item (+46 nodes collapsed)
} "}"
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "NormalBorderTemplate"
= "="
generic_type
type_identifier "PrimTemplate"
type_arguments
< "<"
type_identifier "NormalBorderData"
> ">"
; ";"
impl_item
impl "impl"
generic_type
type_identifier "From"
type_arguments
< "<"
type_identifier "NormalBorderKey"
> ">"
for "for"
type_identifier "NormalBorderTemplate"
declaration_list
{ "{"
function_item
fn "fn"
identifier "from"
parameters
( "("
parameter
identifier "key"
: ":"
type_identifier "NormalBorderKey"
) ")"
-> "->"
type_identifier "Self"
block
{ "{"
let_declaration
let "let"
identifier "common"
= "="
call_expression
scoped_identifier
identifier "PrimTemplateCommonData"
:: "::"
identifier "with_key_common"
arguments
( "("
field_expression
identifier "key"
. "."
field_identifier "common"
) ")"
; ";"
let_declaration (+22 nodes collapsed)
let_declaration
let "let"
identifier "widths"
= "="
call_expression
scoped_identifier
identifier "LayoutSideOffsets"
:: "::"
identifier "from_au"
arguments
( "("
field_expression
field_expression
identifier "key"
. "."
field_identifier "kind"
. "."
field_identifier "widths"
) ")"
; ";"
line_comment
// "//"
expression_statement
call_expression
field_expression
identifier "border"
. "."
field_identifier "normalize"
arguments
( "("
reference_expression
& "&"
identifier "widths"
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "brush_segments"
= "="
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "border_segments"
= "="
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
identifier "create_border_segments"
arguments
( "("
call_expression
field_expression any 2:1
field_expression any 2:1
identifier "common"
. "."
field_identifier "prim_rect"
. "."
field_identifier "size"
arguments
( "("
) ")"
, ","
reference_expression
& "&"
identifier "border"
, ","
reference_expression
& "&"
identifier "widths"
, ","
reference_expression
& "&"
mutable_specifier "mut"
identifier "border_segments"
, ","
reference_expression
& "&"
mutable_specifier "mut"
identifier "brush_segments"
, ","
) ")"
; ";"
struct_expression (+28 nodes collapsed)
} "}"
} "}"
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "NormalBorderDataHandle"
= "="
generic_type
scoped_type_identifier
identifier "intern"
:: "::"
type_identifier "Handle"
type_arguments
< "<"
type_identifier "NormalBorderPrim"
> ">"
; ";"
impl_item (+45 nodes collapsed)
impl_item (+96 nodes collapsed)
impl_item (+83 nodes collapsed)
impl_item (+24 nodes collapsed)
line_comment
// "//"
attribute_item (+21 nodes collapsed)
attribute_item (+21 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Eq"
, ","
identifier "MallocSizeOf"
, ","
identifier "PartialEq"
, ","
identifier "Hash"
) ")"
] "]"
struct_item (+33 nodes collapsed)
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "ImageBorderKey"
= "="
generic_type
type_identifier "PrimKey"
type_arguments
< "<"
type_identifier "ImageBorder"
> ">"
; ";"
impl_item (+53 nodes collapsed)
impl_item
impl "impl"
scoped_type_identifier
identifier "intern"
:: "::"
type_identifier "InternDebug"
for "for"
type_identifier "ImageBorderKey"
declaration_list
{ "{"
} "}"
attribute_item (+21 nodes collapsed)
attribute_item (+21 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "MallocSizeOf"
) ")"
] "]"
struct_item (+64 nodes collapsed)
impl_item
impl "impl"
type_identifier "ImageBorderData"
declaration_list
{ "{"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Update the GPU cache for a given primitive template. This m"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " times per frame, by each primitive reference that refers to"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " template. The initial request call to the GPU cache ensures"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " done if the cache entry is invalid (due to first use or evi"...
function_item
visibility_modifier
pub "pub"
fn "fn"
identifier "update"
parameters (+24 nodes collapsed)
block
{ "{"
let_declaration (+37 nodes collapsed)
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "write_prim_gpu_blocks"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "writer"
, ","
reference_expression
& "&"
call_expression
field_expression any 2:1
field_expression any 2:1
identifier "common"
. "."
field_identifier "prim_rect"
. "."
field_identifier "size"
arguments
( "("
) ")"
) ")"
; ";"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "write_segment_gpu_blocks"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "writer"
) ")"
; ";"
expression_statement
assignment_expression
field_expression
identifier "common"
. "."
field_identifier "gpu_buffer_address"
= "="
call_expression
field_expression
identifier "writer"
. "."
field_identifier "finish"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
identifier "frame_id"
= "="
call_expression
field_expression
field_expression
identifier "frame_state"
. "."
field_identifier "rg_builder"
. "."
field_identifier "frame_id"
arguments
( "("
) ")"
; ";"
expression_statement (+172 nodes collapsed)
expression_statement
assignment_expression
field_expression
identifier "common"
. "."
field_identifier "opacity"
= "="
struct_expression
type_identifier "PrimitiveOpacity"
field_initializer_list
{ "{"
field_initializer
field_identifier "is_opaque"
: ":"
field_expression
self "self"
. "."
field_identifier "is_opaque"
} "}"
; ";"
} "}"
function_item (+74 nodes collapsed)
function_item (+46 nodes collapsed)
} "}"
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "ImageBorderTemplate"
= "="
generic_type
type_identifier "PrimTemplate"
type_arguments
< "<"
type_identifier "ImageBorderData"
> ">"
; ";"
impl_item
impl "impl"
generic_type
type_identifier "From"
type_arguments
< "<"
type_identifier "ImageBorderKey"
> ">"
for "for"
type_identifier "ImageBorderTemplate"
declaration_list
{ "{"
function_item
fn "fn"
identifier "from"
parameters
( "("
parameter
identifier "key"
: ":"
type_identifier "ImageBorderKey"
) ")"
-> "->"
type_identifier "Self"
block
{ "{"
let_declaration
let "let"
identifier "common"
= "="
call_expression
scoped_identifier
identifier "PrimTemplateCommonData"
:: "::"
identifier "with_key_common"
arguments
( "("
field_expression
identifier "key"
. "."
field_identifier "common"
) ")"
; ";"
let_declaration
let "let"
identifier "brush_segments"
= "="
call_expression
field_expression
field_expression
field_expression
identifier "key"
. "."
field_identifier "kind"
. "."
field_identifier "nine_patch"
. "."
field_identifier "create_brush_segments"
arguments
( "("
call_expression
field_expression any 2:1
field_expression any 2:1
identifier "common"
. "."
field_identifier "prim_rect"
. "."
field_identifier "size"
arguments
( "("
) ")"
) ")"
; ";"
struct_expression (+49 nodes collapsed)
} "}"
} "}"
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "ImageBorderDataHandle"
= "="
generic_type
scoped_type_identifier
identifier "intern"
:: "::"
type_identifier "Handle"
type_arguments
< "<"
type_identifier "ImageBorder"
> ">"
; ";"
impl_item (+45 nodes collapsed)
impl_item (+80 nodes collapsed)
impl_item (+24 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "test"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_pointer_width"
= "="
string_literal
" "\""
string_content "64"
" "\""
) ")"
] "]"
function_item
fn "fn"
identifier "test_struct_sizes"
parameters
( "("
) ")"
block
{ "{"
use_declaration
use "use"
scoped_identifier
identifier "std"
:: "::"
identifier "mem"
; ";"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
expression_statement (+25 nodes collapsed)
expression_statement
macro_invocation
identifier "assert_eq"
! "!"
token_tree
( "("
identifier "mem"
:: "::"
identifier "size_of"
:: "::"
< "<"
identifier "NormalBorderTemplate"
> ">"
token_tree
( "("
) ")"
, ","
integer_literal "216"
, ","
string_literal
" "\""
string_content "NormalBorderTemplate size changed"
" "\""
) ")"
; ";"
expression_statement
macro_invocation
identifier "assert_eq"
! "!"
token_tree
( "("
identifier "mem"
:: "::"
identifier "size_of"
:: "::"
< "<"
identifier "NormalBorderKey"
> ">"
token_tree
( "("
) ")"
, ","
integer_literal "104"
, ","
string_literal
" "\""
string_content "NormalBorderKey size changed"
" "\""
) ")"
; ";"
expression_statement (+25 nodes collapsed)
expression_statement
macro_invocation
identifier "assert_eq"
! "!"
token_tree
( "("
identifier "mem"
:: "::"
identifier "size_of"
:: "::"
< "<"
identifier "ImageBorderTemplate"
> ">"
token_tree
( "("
) ")"
, ","
integer_literal "104"
, ","
string_literal
" "\""
string_content "ImageBorderTemplate size changed"
" "\""
) ")"
; ";"
expression_statement
macro_invocation
identifier "assert_eq"
! "!"
token_tree
( "("
identifier "mem"
:: "::"
identifier "size_of"
:: "::"
< "<"
identifier "ImageBorderKey"
> ">"
token_tree
( "("
) ")"
, ","
integer_literal "88"
, ","
string_literal
" "\""
string_content "ImageBorderKey size changed"
" "\""
) ")"
; ";"
} "}"

After

source_file
block_comment
/* "/*"
*/ "*/"
use_declaration
use "use"
scoped_use_list
identifier "api"
:: "::"
use_list
{ "{"
identifier "NormalBorder"
, ","
identifier "PremultipliedColorF"
, ","
identifier "Shadow"
, ","
identifier "RasterSpace"
} "}"
; ";"
use_declaration
use "use"
use_wildcard
scoped_identifier
identifier "api"
:: "::"
identifier "units"
:: "::"
* "*"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "border"
:: "::"
identifier "create_border_segments"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "border"
:: "::"
identifier "NormalBorderAu"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "gpu_types"
:: "::"
identifier "ImageBrushPrimitiveData"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "renderer"
:: "::"
identifier "GpuBufferWriterF"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
crate "crate"
:: "::"
identifier "scene_building"
:: "::"
use_list
{ "{"
identifier "CreateShadow"
, ","
identifier "IsVisible"
} "}"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "frame_builder"
:: "::"
identifier "FrameBuildingState"
; ";"
use_declaration
use "use"
scoped_identifier
crate "crate"
:: "::"
identifier "intern"
; ";"
use_declaration
use "use"
scoped_use_list
scoped_identifier
crate "crate"
:: "::"
identifier "internal_types"
:: "::"
use_list
{ "{"
identifier "LayoutPrimitiveInfo"
, ","
identifier "FrameId"
} "}"
; ";"
use_declaration (+33 nodes collapsed)
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "resource_cache"
:: "::"
identifier "ImageRequest"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "render_task"
:: "::"
identifier "RenderTask"
; ";"
use_declaration
use "use"
scoped_identifier
scoped_identifier
crate "crate"
:: "::"
identifier "render_task_graph"
:: "::"
identifier "RenderTaskId"
; ";"
use_declaration
use "use"
scoped_identifier
super "super"
:: "::"
identifier "storage"
; ";"
attribute_item (+21 nodes collapsed)
attribute_item (+21 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Eq"
, ","
identifier "MallocSizeOf"
, ","
identifier "PartialEq"
, ","
identifier "Hash"
) ")"
] "]"
struct_item (+22 nodes collapsed)
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "NormalBorderKey"
= "="
generic_type
type_identifier "PrimKey"
type_arguments
< "<"
type_identifier "NormalBorderPrim"
> ">"
; ";"
impl_item (+53 nodes collapsed)
impl_item
impl "impl"
scoped_type_identifier
identifier "intern"
:: "::"
type_identifier "InternDebug"
for "for"
type_identifier "NormalBorderKey"
declaration_list
{ "{"
} "}"
attribute_item (+21 nodes collapsed)
attribute_item (+21 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "MallocSizeOf"
) ")"
] "]"
struct_item (+46 nodes collapsed)
impl_item
impl "impl"
type_identifier "NormalBorderData"
declaration_list
{ "{"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Update the GPU cache for a given primitive template. This m"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " times per frame, by each primitive reference that refers to"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " template. The initial request call to the GPU cache ensures"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " done if the cache entry is invalid (due to first use or evi"...
function_item
visibility_modifier
pub "pub"
fn "fn"
identifier "update"
parameters (+24 nodes collapsed)
block
{ "{"
let_declaration (+37 nodes collapsed)
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "write_prim_gpu_blocks"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "writer"
, ","
field_expression any 2:1
identifier "common"
. "."
field_identifier "prim_size"
) ")"
; ";"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "write_segment_gpu_blocks"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "writer"
) ")"
; ";"
expression_statement
assignment_expression
field_expression
identifier "common"
. "."
field_identifier "gpu_buffer_address"
= "="
call_expression
field_expression
identifier "writer"
. "."
field_identifier "finish"
arguments
( "("
) ")"
; ";"
expression_statement
assignment_expression
field_expression
identifier "common"
. "."
field_identifier "opacity"
= "="
call_expression
scoped_identifier
identifier "PrimitiveOpacity"
:: "::"
identifier "translucent"
arguments
( "("
) ")"
; ";"
} "}"
function_item (+69 nodes collapsed)
function_item (+46 nodes collapsed)
} "}"
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "NormalBorderTemplate"
= "="
generic_type
type_identifier "PrimTemplate"
type_arguments
< "<"
type_identifier "NormalBorderData"
> ">"
; ";"
impl_item
impl "impl"
generic_type
type_identifier "From"
type_arguments
< "<"
type_identifier "NormalBorderKey"
> ">"
for "for"
type_identifier "NormalBorderTemplate"
declaration_list
{ "{"
function_item
fn "fn"
identifier "from"
parameters
( "("
parameter
identifier "key"
: ":"
type_identifier "NormalBorderKey"
) ")"
-> "->"
type_identifier "Self"
block
{ "{"
let_declaration
let "let"
identifier "common"
= "="
call_expression
scoped_identifier
identifier "PrimTemplateCommonData"
:: "::"
identifier "with_key_common"
arguments
( "("
field_expression
identifier "key"
. "."
field_identifier "common"
) ")"
; ";"
let_declaration (+22 nodes collapsed)
let_declaration
let "let"
identifier "widths"
= "="
call_expression
scoped_identifier
identifier "LayoutSideOffsets"
:: "::"
identifier "from_au"
arguments
( "("
field_expression
field_expression
identifier "key"
. "."
field_identifier "kind"
. "."
field_identifier "widths"
) ")"
; ";"
line_comment
// "//"
expression_statement
call_expression
field_expression
identifier "border"
. "."
field_identifier "normalize"
arguments
( "("
reference_expression
& "&"
identifier "widths"
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "brush_segments"
= "="
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
mutable_specifier "mut"
identifier "border_segments"
= "="
call_expression
scoped_identifier
identifier "Vec"
:: "::"
identifier "new"
arguments
( "("
) ")"
; ";"
expression_statement
call_expression
identifier "create_border_segments"
arguments
( "("
field_expression any 2:1
identifier "common"
. "."
field_identifier "prim_size"
, ","
reference_expression
& "&"
identifier "border"
, ","
reference_expression
& "&"
identifier "widths"
, ","
reference_expression
& "&"
mutable_specifier "mut"
identifier "border_segments"
, ","
reference_expression
& "&"
mutable_specifier "mut"
identifier "brush_segments"
, ","
) ")"
; ";"
struct_expression (+28 nodes collapsed)
} "}"
} "}"
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "NormalBorderDataHandle"
= "="
generic_type
scoped_type_identifier
identifier "intern"
:: "::"
type_identifier "Handle"
type_arguments
< "<"
type_identifier "NormalBorderPrim"
> ">"
; ";"
impl_item (+45 nodes collapsed)
impl_item (+96 nodes collapsed)
impl_item (+83 nodes collapsed)
impl_item (+24 nodes collapsed)
line_comment
// "//"
attribute_item (+21 nodes collapsed)
attribute_item (+21 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "Debug"
, ","
identifier "Clone"
, ","
identifier "Eq"
, ","
identifier "MallocSizeOf"
, ","
identifier "PartialEq"
, ","
identifier "Hash"
) ")"
] "]"
struct_item (+33 nodes collapsed)
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "ImageBorderKey"
= "="
generic_type
type_identifier "PrimKey"
type_arguments
< "<"
type_identifier "ImageBorder"
> ">"
; ";"
impl_item (+53 nodes collapsed)
impl_item
impl "impl"
scoped_type_identifier
identifier "intern"
:: "::"
type_identifier "InternDebug"
for "for"
type_identifier "ImageBorderKey"
declaration_list
{ "{"
} "}"
attribute_item (+21 nodes collapsed)
attribute_item (+21 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "derive"
token_tree
( "("
identifier "MallocSizeOf"
) ")"
] "]"
struct_item (+64 nodes collapsed)
impl_item
impl "impl"
type_identifier "ImageBorderData"
declaration_list
{ "{"
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " Update the GPU cache for a given primitive template. This m"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " times per frame, by each primitive reference that refers to"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " template. The initial request call to the GPU cache ensures"...
line_comment
// "//"
outer_doc_comment_marker
/ "/"
doc_comment " done if the cache entry is invalid (due to first use or evi"...
function_item
visibility_modifier
pub "pub"
fn "fn"
identifier "update"
parameters (+24 nodes collapsed)
block
{ "{"
let_declaration (+37 nodes collapsed)
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "write_prim_gpu_blocks"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "writer"
, ","
reference_expression
& "&"
field_expression any 2:1
identifier "common"
. "."
field_identifier "prim_size"
) ")"
; ";"
expression_statement
call_expression
field_expression
self "self"
. "."
field_identifier "write_segment_gpu_blocks"
arguments
( "("
reference_expression
& "&"
mutable_specifier "mut"
identifier "writer"
) ")"
; ";"
expression_statement
assignment_expression
field_expression
identifier "common"
. "."
field_identifier "gpu_buffer_address"
= "="
call_expression
field_expression
identifier "writer"
. "."
field_identifier "finish"
arguments
( "("
) ")"
; ";"
let_declaration
let "let"
identifier "frame_id"
= "="
call_expression
field_expression
field_expression
identifier "frame_state"
. "."
field_identifier "rg_builder"
. "."
field_identifier "frame_id"
arguments
( "("
) ")"
; ";"
expression_statement (+172 nodes collapsed)
expression_statement
assignment_expression
field_expression
identifier "common"
. "."
field_identifier "opacity"
= "="
struct_expression
type_identifier "PrimitiveOpacity"
field_initializer_list
{ "{"
field_initializer
field_identifier "is_opaque"
: ":"
field_expression
self "self"
. "."
field_identifier "is_opaque"
} "}"
; ";"
} "}"
function_item (+74 nodes collapsed)
function_item (+46 nodes collapsed)
} "}"
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "ImageBorderTemplate"
= "="
generic_type
type_identifier "PrimTemplate"
type_arguments
< "<"
type_identifier "ImageBorderData"
> ">"
; ";"
impl_item
impl "impl"
generic_type
type_identifier "From"
type_arguments
< "<"
type_identifier "ImageBorderKey"
> ">"
for "for"
type_identifier "ImageBorderTemplate"
declaration_list
{ "{"
function_item
fn "fn"
identifier "from"
parameters
( "("
parameter
identifier "key"
: ":"
type_identifier "ImageBorderKey"
) ")"
-> "->"
type_identifier "Self"
block
{ "{"
let_declaration
let "let"
identifier "common"
= "="
call_expression
scoped_identifier
identifier "PrimTemplateCommonData"
:: "::"
identifier "with_key_common"
arguments
( "("
field_expression
identifier "key"
. "."
field_identifier "common"
) ")"
; ";"
let_declaration
let "let"
identifier "brush_segments"
= "="
call_expression
field_expression
field_expression
field_expression
identifier "key"
. "."
field_identifier "kind"
. "."
field_identifier "nine_patch"
. "."
field_identifier "create_brush_segments"
arguments
( "("
field_expression any 2:1
identifier "common"
. "."
field_identifier "prim_size"
) ")"
; ";"
struct_expression (+49 nodes collapsed)
} "}"
} "}"
type_item
visibility_modifier
pub "pub"
type "type"
type_identifier "ImageBorderDataHandle"
= "="
generic_type
scoped_type_identifier
identifier "intern"
:: "::"
type_identifier "Handle"
type_arguments
< "<"
type_identifier "ImageBorder"
> ">"
; ";"
impl_item (+45 nodes collapsed)
impl_item (+80 nodes collapsed)
impl_item (+24 nodes collapsed)
attribute_item
# "#"
[ "["
attribute
identifier "test"
] "]"
attribute_item
# "#"
[ "["
attribute
identifier "cfg"
token_tree
( "("
identifier "target_pointer_width"
= "="
string_literal
" "\""
string_content "64"
" "\""
) ")"
] "]"
function_item
fn "fn"
identifier "test_struct_sizes"
parameters
( "("
) ")"
block
{ "{"
use_declaration
use "use"
scoped_identifier
identifier "std"
:: "::"
identifier "mem"
; ";"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
line_comment
// "//"
expression_statement (+25 nodes collapsed)
expression_statement
macro_invocation
identifier "assert_eq"
! "!"
token_tree
( "("
identifier "mem"
:: "::"
identifier "size_of"
:: "::"
< "<"
identifier "NormalBorderTemplate"
> ">"
token_tree
( "("
) ")"
, ","
integer_literal "208"
, ","
string_literal
" "\""
string_content "NormalBorderTemplate size changed"
" "\""
) ")"
; ";"
expression_statement
macro_invocation
identifier "assert_eq"
! "!"
token_tree
( "("
identifier "mem"
:: "::"
identifier "size_of"
:: "::"
< "<"
identifier "NormalBorderKey"
> ">"
token_tree
( "("
) ")"
, ","
integer_literal "96"
, ","
string_literal
" "\""
string_content "NormalBorderKey size changed"
" "\""
) ")"
; ";"
expression_statement (+25 nodes collapsed)
expression_statement
macro_invocation
identifier "assert_eq"
! "!"
token_tree
( "("
identifier "mem"
:: "::"
identifier "size_of"
:: "::"
< "<"
identifier "ImageBorderTemplate"
> ">"
token_tree
( "("
) ")"
, ","
integer_literal "96"
, ","
string_literal
" "\""
string_content "ImageBorderTemplate size changed"
" "\""
) ")"
; ";"
expression_statement
macro_invocation
identifier "assert_eq"
! "!"
token_tree
( "("
identifier "mem"
:: "::"
identifier "size_of"
:: "::"
< "<"
identifier "ImageBorderKey"
> ">"
token_tree
( "("
) ")"
, ","
integer_literal "80"
, ","
string_literal
" "\""
string_content "ImageBorderKey size changed"
" "\""
) ")"
; ";"
} "}"