http://bugs.winehq.org/show_bug.cgi?id=14303
Summary: Listview: select all is incredibly slow. Product: Wine Version: 1.1.0 Platform: All OS/Version: All Status: UNCONFIRMED Severity: normal Priority: P2 Component: comctl32 AssignedTo: wine-bugs@winehq.org ReportedBy: winehq.10.drkshadow@spamgourmet.com
Created an attachment (id=14587) --> (http://bugs.winehq.org/attachment.cgi?id=14587) quickly select all items in a listview
When you hit Ctrl-A in a listview control, the control loops through every single item in the list selecting them and setting focus on the item. With tens of thousands of items, this takes a _long_time_.
I've created a patch that sets the range of selected items. This select all happens much more instantaneously. As an added bugfix, the selected item will not be changed when all items are selected.
http://bugs.winehq.org/show_bug.cgi?id=14303
Vitaliy Margolen vitaliy@kievinfo.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Severity|normal |trivial OS/Version|All |other Platform|All |Other
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #1 from Vitaliy Margolen vitaliy@kievinfo.com 2008-07-04 19:52:05 --- Pleas send all patches to wine-patches mailing list. After of course fixing formating.
http://bugs.winehq.org/show_bug.cgi?id=14303
DrkShadow winehq.10.drkshadow@spamgourmet.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Attachment #14587|0 |1 is obsolete| |
--- Comment #2 from DrkShadow winehq.10.drkshadow@spamgourmet.com 2008-07-25 23:25:15 --- Created an attachment (id=15044) --> (http://bugs.winehq.org/attachment.cgi?id=15044) conditional corrections to previous patch
The last patch had some if-statement errors; an update was sent to patches list but rejected. If anyone else wants a complete fix or to modify it to please others, the attached code works in my manual testing.
http://bugs.winehq.org/show_bug.cgi?id=14303
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #3 from Nikolay Sivov bunglehead@gmail.com 2009-05-31 05:56:06 --- (In reply to comment #2)
Created an attachment (id=15044)
--> (http://bugs.winehq.org/attachment.cgi?id=15044) [details]
Patch is obviously wrong: - LVN_ITEMCHANGING/LVN_ITEMCHANGED notifications ignored; - callback mask ignored.
Going further such optimization with storing only range index isn't possible with current design cause it requires item state synchronization with ranges before sorting and after it - for 10000 items it won't be so fast.
(In reply to comment #0)
I've created a patch that sets the range of selected items. This select all happens much more instantaneously.
This could be a result of omitted notifications.
(In reply to comment #0)
With tens of thousands of items, this takes a _long_time_.
Maybe it's time to switch LVS_OWNERDATA style on.
After that's a potential WONTFIX (or INVALID maybe) for me. I'd like to see any thoughts on that.
http://bugs.winehq.org/show_bug.cgi?id=14303
Igor Tarasov tarasov.igor@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |tarasov.igor@gmail.com
--- Comment #4 from Igor Tarasov tarasov.igor@gmail.com 2009-07-21 05:03:03 --- (In reply to comment #3)
(In reply to comment #0)
With tens of thousands of items, this takes a _long_time_.
Maybe it's time to switch LVS_OWNERDATA style on.
With LVS_OWNERDATA it takes forever to select all (or partially) list in ~200 thousands items.
(In reply to comment #3)
After that's a potential WONTFIX (or INVALID maybe) for me.
Why? This operation is really way too slow.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #5 from Nikolay Sivov bunglehead@gmail.com 2009-07-21 06:02:47 --- (In reply to comment #4)
With LVS_OWNERDATA it takes forever to select all (or partially) list in ~200 thousands items.
What about notifications here? Is this broken or not? For me the possible reason for ownerdata slowdown is a lot of notification messages to be sent.
(In reply to comment #3)
After that's a potential WONTFIX (or INVALID maybe) for me.
Why? This operation is really way too slow.
If we're broken in notification code it's another bug. Patch author completely removed notifications, that's why this solution is invalid.
If slowdown is in a huge amount of messages it can't be fixed in listview and is a general messaging performance issue.
BTW, Igor, could you try to disable notifications in set_main_item() function: --- if (notify_listview(infoPtr, LVN_ITEMCHANGING, &nmlv)) --- if (infoPtr->bDoChangeNotify) notify_listview(infoPtr, LVN_ITEMCHANGED, &nmlv); --- and report if it improves anything?
Another reason could be that I switched to store selection and focus flags in main item state (in main dpa) instead of resync it after and before sorting. This change improved sorting and made code more clear. I don't think another offset, dereferencing and assignment I've added to store it changed things a lot.
I don't have enough time now, could you produce something like a benchmark (compilable on linux, as a crossbuild too)? Then we could profile it to find where we spend most of the time.
http://bugs.winehq.org/show_bug.cgi?id=14303
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW CC| |bunglehead@gmail.com Ever Confirmed|0 |1
--- Comment #6 from Nikolay Sivov bunglehead@gmail.com 2009-07-21 23:46:54 --- Apparently LVS_OWNERDATA performance could be improved. It sends only one notification on select all case. Test sent:
http://www.winehq.org/pipermail/wine-patches/2009-July/076238.html
So, 200 thousands it will reduce from 400000 messages to 1.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #7 from Igor Tarasov tarasov.igor@gmail.com 2009-07-24 11:25:01 --- Sorry for not responding quickly, I had to bring up testing environment.
(In reply to comment #5)
(In reply to comment #4)
With LVS_OWNERDATA it takes forever to select all (or partially) list in ~200 thousands items.
What about notifications here? Is this broken or not?
How can I be sure if that is broken or not, if I have never seen specs on these? I've looked through MSDN but have not found any notions regarding LVS_OWNERDATA.
Patch author completely removed notifications, that's why this solution is invalid.
But that does not make BUG invalid. The FIX is broken, not bug-report.
If slowdown is in a huge amount of messages it can't be fixed in listview and is a general messaging performance issue.
This can't be so. I've just checked that in windows with the same huge listview and it works immediately. It's like it was with bug #12701.
BTW, Igor, could you try to disable notifications in set_main_item() function:
It helped, but only a bit. It's still very slow.
BTW, another issue found here: there is even more noticeable slowdown when you click some item after you have selected them all (that is when all items get unselected).
I don't have enough time now, could you produce something like a benchmark (compilable on linux, as a crossbuild too)? Then we could profile it to find where we spend most of the time.
I think that I do not understand well what I need to do.
(In reply to comment #6)
Apparently LVS_OWNERDATA performance could be improved. It sends only one notification on select all case. Test sent: So, 200 thousands it will reduce from 400000 messages to 1.
Well, I see that your test case is for select all case only. But you should know that there is huge difference in performance not only in select all, but also in partial selects.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #8 from Nikolay Sivov bunglehead@gmail.com 2009-07-24 19:01:10 --- (In reply to comment #7)
How can I be sure if that is broken or not, if I have never seen specs on these? I've looked through MSDN but have not found any notions regarding LVS_OWNERDATA.
I've already done this with recently included tests. It seems not to be documented that ownerdata lists throw a single notification (for all items case).
If slowdown is in a huge amount of messages it can't be fixed in listview and is a general messaging performance issue.
This can't be so. I've just checked that in windows with the same huge listview and it works immediately. It's like it was with bug #12701.
BTW, Igor, could you try to disable notifications in set_main_item() function:
It helped, but only a bit. It's still very slow.
BTW, another issue found here: there is even more noticeable slowdown when you click some item after you have selected them all (that is when all items get unselected).
I see, will look at dropping selection code too, thanks.
I don't have enough time now, could you produce something like a benchmark (compilable on linux, as a crossbuild too)? Then we could profile it to find where we spend most of the time.
I think that I do not understand well what I need to do.
Nevermind. I was talking about some interactive test application to shows this issue.
Well, I see that your test case is for select all case only. But you should know that there is huge difference in performance not only in select all, but also in partial selects.
So, the reason is that we iterate when we could probably avoid it. I'll take a look at it.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #9 from Austin English austinenglish@gmail.com 2010-05-19 16:46:01 --- This is your friendly reminder that there has been no bug activity for 6 months. Is this still an issue in current (1.1.44 or newer) wine?
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #10 from Igor Tarasov tarasov.igor@gmail.com 2010-05-19 17:00:54 --- Still an issue.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #11 from Austin English austinenglish@gmail.com 2012-03-19 14:52:57 CDT --- This is your friendly reminder that there has been no bug activity for 650 days. Is this still an issue in current (1.4 or newer) wine?
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #12 from Igor Tarasov tarasov.igor@gmail.com 2012-03-19 15:52:30 CDT --- Yep, still an issue.
http://bugs.winehq.org/show_bug.cgi?id=14303
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Attachment #15044|0 |1 is obsolete| |
--- Comment #13 from Nikolay Sivov bunglehead@gmail.com 2012-03-20 01:23:56 CDT --- Created attachment 39472 --> http://bugs.winehq.org/attachment.cgi?id=39472 patch
Yeah, that's been a while and I kind of forgot about this problem. Please try this patch.
http://bugs.winehq.org/show_bug.cgi?id=14303
Nikolay Sivov bunglehead@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords|patch | Severity|trivial |minor
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #14 from Igor Tarasov tarasov.igor@gmail.com 2012-03-20 13:42:34 CDT --- Umm... It does not allow to select all with ctrl+a. What I did to test it is selected first item, then scrolled down to the end and selected the last one. Deselection is also slow. These operation still is very slow, while with native comctl it works instantly.
Can't test "select all" variant, sorry.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #15 from Nikolay Sivov bunglehead@gmail.com 2012-03-20 13:46:24 CDT --- How do you test it? Could you attach or link to your test application?
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #16 from Igor Tarasov tarasov.igor@gmail.com 2012-03-20 14:12:58 CDT --- No, I can't. It is non redistributable. There is such window: http://www.polosatus.ru/wine/listview.png Just a LVS_OWNERDATA listview with list of all words indexed in db. Somewhere around 200k items.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #17 from Nikolay Sivov bunglehead@gmail.com 2012-03-20 14:20:54 CDT --- Ok, did you mean that select all function is broken for you with this patch and works without it (slow or not doesn't matter)?
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #18 from Igor Tarasov tarasov.igor@gmail.com 2012-03-20 14:36:07 CDT --- I just say, that I can't test "Select all" as single command, which is being executed on ctrl+a shortcut, for instance. But, I can select all of items manually. And this feature is very slow with builtin comctl32.
I mean that entire LVS_OWNERDATA behavior is not optimised (and supposedly bogus). Some parts of it were already fixed (see bug 12701, it deals with search and listview destruction), some of them are still here.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #19 from Igor Tarasov tarasov.igor@gmail.com 2012-03-20 14:37:13 CDT --- And your patch did not help, manual selection of big portions of items is very slow.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #20 from Nikolay Sivov bunglehead@gmail.com 2012-03-20 14:43:52 CDT --- (In reply to comment #18)
I just say, that I can't test "Select all" as single command, which is being executed on ctrl+a shortcut, for instance. But, I can select all of items manually. And this feature is very slow with builtin comctl32.
The question was does attached patch break select all function for you or not? Forget about performance for a moment.
http://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #21 from Igor Tarasov tarasov.igor@gmail.com 2012-03-21 03:25:09 CDT --- No. That dialog does not support "select all". That is, nothing happens when you hit ctrl+a. On both native and builtin versions of comctl32. So, I don't know if this patch changed something.
https://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #22 from Austin English austinenglish@gmail.com --- This is your friendly reminder that there has been no bug activity for 2 years. Is this still an issue in current (1.7.16 or newer) wine?
https://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #23 from Nikolay Sivov bunglehead@gmail.com --- Yes, I should be still a problem.
https://bugs.winehq.org/show_bug.cgi?id=14303
Austin English austinenglish@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |patch
https://bugs.winehq.org/show_bug.cgi?id=14303
joaopa jeremielapuree@yahoo.fr changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |jeremielapuree@yahoo.fr
--- Comment #24 from joaopa jeremielapuree@yahoo.fr --- Does the bug still occur with current wine (3.21)?
https://bugs.winehq.org/show_bug.cgi?id=14303
--- Comment #25 from joaopa jeremielapuree@yahoo.fr --- Does the bug still occur with wine-4.19?