From c705013ee16c563fb6a937925b6a0d68d3064007 Mon Sep 17 00:00:00 2001 From: Anton Romanov Date: Fri, 11 Nov 2016 21:31:22 -0800 Subject: [PATCH] Cache track similarity in Query to speed up result insertion/removal --- src/libtomahawk/Query.cpp | 12 ++++++++++-- src/libtomahawk/Query_p.h | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/libtomahawk/Query.cpp b/src/libtomahawk/Query.cpp index 98a54a610..51c7741fc 100644 --- a/src/libtomahawk/Query.cpp +++ b/src/libtomahawk/Query.cpp @@ -622,6 +622,10 @@ float Query::howSimilar( const Tomahawk::result_ptr& r ) { Q_D( Query ); + if (d->howSimilarCache.find(r->id()) != d->howSimilarCache.end()) + { + return d->howSimilarCache[r->id()]; + } // result values const QString& rArtistname = r->track()->artistSortname(); const QString& rAlbumname = r->track()->albumSortname(); @@ -678,12 +682,16 @@ Query::howSimilar( const Tomahawk::result_ptr& r ) const int mlatr = qMax( artistTrackname.length(), rArtistTrackname.length() ); const float dcatr = (float)( mlatr - atrdist ) / mlatr; - return qMax( dctrk, qMax( dcatr, qMax( dcart, dcalb ) ) ); + float resultScore = qMax( dctrk, qMax( dcatr, qMax( dcart, dcalb ) ) ); + d->howSimilarCache[r->id()] = resultScore; + return resultScore; } else { // weighted, so album match is worth less than track title - return ( dcart * 4 + dcalb + dctrk * 5 ) / 10; + float resultScore = ( dcart * 4 + dcalb + dctrk * 5 ) / 10; + d->howSimilarCache[r->id()] = resultScore; + return resultScore; } } diff --git a/src/libtomahawk/Query_p.h b/src/libtomahawk/Query_p.h index 635c8bbc6..f3de7f009 100644 --- a/src/libtomahawk/Query_p.h +++ b/src/libtomahawk/Query_p.h @@ -4,6 +4,7 @@ #include "Query.h" #include +#include namespace Tomahawk { @@ -58,6 +59,8 @@ private: mutable QMutex mutex; QWeakPointer< Tomahawk::Query > ownRef; + + std::map howSimilarCache; }; } // Tomahawk