-
Notifications
You must be signed in to change notification settings - Fork 0
xilem: Port rest of examples and add Memoize
to xilem_core
#2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
xilem: Port rest of examples and add Memoize
to xilem_core
#2
Conversation
xilem_core/src/view/memoize.rs
Outdated
pub fn memoize<State, Action, Context, Data, V, ViewFn>( | ||
data: Data, | ||
view: ViewFn, | ||
) -> Memoize<Data, ViewFn> | ||
where | ||
F: Fn(&D) -> V + Send, | ||
Data: PartialEq + 'static, | ||
ViewFn: Fn(&Data) -> V + 'static, | ||
V: View<State, Action, Context>, | ||
Context: ViewPathTracker, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I had this in xilem
as well with bounds for WidgetView + Send + Sync
etc. but I decided against it, because I think it's more practical to have just one memoize
function for different View
implementations. So that this function can also be used in potential xilem_web
contexts in xilem
without having to use a different function.
I've also removed static_view
mostly because of the return type, and that I think that Arc
should be probably used instead (only inconvenience is having to use .clone()
though).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Most of these changes look good, thanks. A few nits on naming.
I will also need to run these examples
Thanks for the review, agree with everything. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code looks good. Will merge, although I have not executed the example locally
* xilem: Port rest of examples and add `Memoize` to `xilem_core` * cargo fmt * Address review comments * Add License header
New tracy image:  New log tracing file: <details><summary>An overview of the new logs</summary> <p> ``` 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}: masonry::passes::update: RootWidget received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#8}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#8}:SizedBox{id=linebender#7}: masonry::passes::update: SizedBox received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#8}:SizedBox{id=linebender#7}:Flex{id=linebender#6}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#8}:SizedBox{id=linebender#7}:Flex{id=linebender#6}:Flex{id=#3}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#8}:SizedBox{id=linebender#7}:Flex{id=linebender#6}:Flex{id=#3}:Prose{id=#1}: masonry::passes::update: Prose received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#8}:SizedBox{id=linebender#7}:Flex{id=linebender#6}:Flex{id=#3}:Label{id=#2}: masonry::passes::update: Label received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#8}:SizedBox{id=linebender#7}:Flex{id=linebender#6}:Flex{id=linebender#5}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#8}:SizedBox{id=linebender#7}:Flex{id=linebender#6}:Flex{id=linebender#5}:VariableLabel{id=#4}: masonry::passes::update: VariableLabel received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}:Button{id=linebender#10}: masonry::passes::update: Button received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}:Button{id=linebender#10}:Label{id=linebender#9}: masonry::passes::update: Label received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}:Button{id=linebender#12}: masonry::passes::update: Button received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}:Button{id=linebender#12}:Label{id=linebender#11}: masonry::passes::update: Label received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}:Button{id=linebender#14}: masonry::passes::update: Button received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}:Button{id=linebender#14}:Label{id=linebender#13}: masonry::passes::update: Label received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}:Button{id=linebender#16}: masonry::passes::update: Button received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Flex{id=linebender#17}:Button{id=linebender#16}:Label{id=linebender#15}: masonry::passes::update: Label received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}: masonry::passes::update: Portal received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}:SizedBox{id=linebender#24}: masonry::passes::update: SizedBox received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}:SizedBox{id=linebender#24}:Flex{id=linebender#23}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}:SizedBox{id=linebender#24}:Flex{id=linebender#23}:Flex{id=linebender#20}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}:SizedBox{id=linebender#24}:Flex{id=linebender#23}:Flex{id=linebender#20}:Prose{id=linebender#18}: masonry::passes::update: Prose received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}:SizedBox{id=linebender#24}:Flex{id=linebender#23}:Flex{id=linebender#20}:Label{id=linebender#19}: masonry::passes::update: Label received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}:SizedBox{id=linebender#24}:Flex{id=linebender#23}:Flex{id=linebender#22}: masonry::passes::update: Flex received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}:SizedBox{id=linebender#24}:Flex{id=linebender#23}:Flex{id=linebender#22}:VariableLabel{id=linebender#21}: masonry::passes::update: VariableLabel received Update::WidgetAdded 14:37:40.365Z TRACE update_new_widgets:RootWidget{id=linebender#165}:Flex{id=linebender#164}:Portal{id=linebender#163}:Flex{id=linebender#160}:SizedBox{id=linebender#31}: masonry::passes::update: SizedBox received Update::WidgetAdded ``` </p> </details> This was originally an experiment into caching spans, but I determined that was non-viable due to the pass names.
With this everything should be ported, which was previously available in the "non-coreized" xilem.
(Was also pretty straight-forward btw. I suggest diffing against upstream main, because most of the changes here, is just uncommenting code)
I think only
Adapt
is missing in newxilem_core
when comparing to oldxilem_core
, but I think this should probably be a separate PR upstream, as it wasn't currently available inxilem
anyway.