Skip to content

Conversation

Philipp-M
Copy link
Collaborator

@Philipp-M Philipp-M commented May 27, 2024

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 new xilem_core when comparing to old xilem_core, but I think this should probably be a separate PR upstream, as it wasn't currently available in xilem anyway.

Comment on lines 111 to 119
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,
Copy link
Collaborator Author

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).

Copy link
Owner

@DJMcNab DJMcNab left a 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

@Philipp-M
Copy link
Collaborator Author

Thanks for the review, agree with everything.

Copy link
Owner

@DJMcNab DJMcNab left a 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

@DJMcNab DJMcNab merged commit 824112c into DJMcNab:core-two May 27, 2024
@Philipp-M Philipp-M deleted the xilem_port-examples-and-memoize branch May 27, 2024 21:43
DJMcNab pushed a commit that referenced this pull request Jun 3, 2024
* xilem: Port rest of examples and add `Memoize` to `xilem_core`

* cargo fmt

* Address review comments

* Add License header
DJMcNab added a commit that referenced this pull request Nov 11, 2024
New tracy image:


![image](https://github.com/user-attachments/assets/94e54c89-8159-4dd4-a521-4a7122f64375)

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants