Skip to content
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

Find/replace overlay: reassign to changed shell asynchronously #1945 #2096

Merged
merged 1 commit into from
Jul 18, 2024

Conversation

HeikoKlare
Copy link
Contributor

@HeikoKlare HeikoKlare commented Jul 16, 2024

The synchronous execution of reassigning the FindReplaceOverlay to a shell sporadically makes the application hang on Linux. This makes the execution asynchronous and avoid repeated executions of the reassignment.

Contributes to #1945

Follow-up to #1946

…e-platform#1945

The synchronous execution of reassigning the FindReplaceOverlay to a
shell sporadically makes the application hang on Linux. This makes the
execution asynchronous and avoid repeated executions of the
reassignment.

Contributes to
eclipse-platform#1945
setParentShell(targetPart.getSite().getShell());
open();
targetPart.setFocus();
getShell().getDisplay().asyncExec(() -> {
Copy link
Contributor

@Wittmaxi Wittmaxi Jul 16, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This was the code leading to a bad bug on windows #1946 (comment)
The difference with the if being inside of the asyncexec block might be enough to not have the overlay be called multiple times, but somehow I doubt we really want to always create a new asynchronous job every time some movement was made

Copy link
Contributor Author

@HeikoKlare HeikoKlare Jul 17, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure whether I get your points correctly.

The bug we had before was a flickering because the close/open combination was executed multiple times. This is properly prevented by re-checking the necessity for doing this close/open within the asynchronous execution block. On Windows, I looks fine:
find_replace_async_new_parent_shell

but somehow I doubt we really want to always create a new asynchronous job every time some movement was made

Why do you assume that the execution is done "very time some movement was made"? The asynchronous execution is only initiated when the target of an open find/replace overlay is moved to another shell, which is a rather seldom user interaction (the condition is checked inside and outside of the execution block). I have debugged the behavior again and found that in this scenario the asynchronous execution is spawned either one or two times, such that at most one execution is "unecessary" (i.e., doing nothing as the condition evaluates to false) on every occurence of that scenario. I find this acceptable compared to some more complex tracking if whether the asynchronous execution was already initiated to avoid doing it a second time. What do you think, @Wittmaxi?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I missed the outer if-clause, sorry! Thank you for clearing this up, I am in favor of merging this PR now.

Copy link
Contributor

Test Results

 1 815 files  ±0   1 815 suites  ±0   1h 30m 7s ⏱️ - 1m 1s
 7 677 tests ±0   7 449 ✅ ±0  228 💤 ±0  0 ❌ ±0 
24 192 runs  ±0  23 443 ✅ ±0  749 💤 ±0  0 ❌ ±0 

Results for commit aaec895. ± Comparison against base commit 00dbbf1.

@HeikoKlare HeikoKlare merged commit 8534560 into eclipse-platform:master Jul 18, 2024
16 checks passed
@HeikoKlare HeikoKlare deleted the issue-1945-follow-up branch July 18, 2024 10:13
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