forked from micropython/micropython
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
displayio
and vectorio
: move to displayio_area_union and away from _expand
#4486
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
Merged
Merged
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
Did you consider or measure the effective impact of switching from 4 conditioned writes to multiple conditions followed by 4 branching unconditional writes?
Probably in this case it is okay because it is per-frame, but seemingly innocuous change can have dramatic pixel fill rate or frame latency impact in this area so I’m somewhat skeptical of doing more work than is necessary.
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.
That's a great point. My main motivation was to fix an issue where when area1 was combined with an empty area (defined as empty by x1==x2==0) that it would return an area with x1=0 and x2=area1.x2. This caused unnecessary dirty rectangle redrawing.
But your point is about performance of the
union
command vs. the code inexpand
. I didn't look at any performance differences. I've never done any performance testing down at the C-level. If you give a good example of how best to do this to make the comparison, and I'll check it out.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 think a test for this would be a chore. Native time functions have a 32khz resolution iirc and either call should surely take less than 31 microseconds? You could time a frame with several 1px overlapping rectangles but there’s quite a bit of noise in that aggregate signal. I’ve wrapped code up higher in the displayio draw stack to A/B test things in this way but I do not have a clear example for you to follow.
Last time I was actively adding to vectorio I wanted to make a more convenient way to use a high precision hardware timer for things like this.
I really don’t think there’s a problem with this code, I just appreciate you taking an active interest and hope you also always defend (and improve!) the pixel fill rate :-)