michaelh marked 4 inline comments as done.
michaelh added inline comments.

INLINE COMMENTS

> bruns wrote in databasesanitizer.cpp:159
> I can not come up with a reason to use a MultiHash here in the first place - 
> all that is needed is the deviceId and the file count per device.
> 
> You can use a QMap<DeviceId, Count> here, and use
> 
>   usedDevices[info.deviceId] += 1;
> 
> (operator[] default-constructs the ValueType, which for e.g. `int` is 
> guranteed by Qt to be 0).
> 
> This reduces the effort for counting the items per device from //(D + 3) * 
> F// to //F//.
> (D: number of devices, F: number of files).
> Currently you walk the infos list once to create the MultiHash, and then walk 
> the Multihash once for `uniqueKeys()`, and once for each device when calling 
> `usedDevices.value()`. Cumulated effort for `.count()` is //F//.
> 
> In your case, this would reduce the time for counting by a factor of 14. You 
> also save the memory for creating a temporary MultiHash with ~20000 items.

Thanks!

> bruns wrote in fsutils.cpp:111
> The question is if this really belongs in the library then.
> 
> IMHO the whole `printDevices()` function should be moved into baloodb.cpp, 
> The DatabaseSanitizer should export either `createList` or a function 
> returning `QVector<DeviceId, Count>`. Going from the DeviceId to the 
> DeviceInfo should happen in baloodb.

I agree completely and followed your suggestion. Currently I'm stuck, though. 
Using Solid to obtain the  accessibilty info of volumes and network shares, it 
seems only `Solid::Block` provides the `major` and `minor` properties needed to 
map to `deviceId`. But network shares don't implement Block.  :-/ 
Any ideas? Maybe that is the reason why BalooEngine isn't using Solid?

REPOSITORY
  R293 Baloo

REVISION DETAIL
  https://phabricator.kde.org/D11452

To: michaelh, #baloo, #frameworks
Cc: bruns, smithjd, ashaposhnikov, michaelh, astippich, spoorun, ngraham, 
alexeymin

Reply via email to