vlc | branch: master | Francois Cartegnie <[email protected]> | Mon Jun 11 10:56:40 2012 +0200| [0baf709f0ae1ac8d8f1fd81b5111d2f5e38d4217] | committer: Francois Cartegnie
Revert "Qt: PLModel: try to agregate inserts for efficiency" This reverts commit bd0ae7ec66f9e94b877ec1b206fce52eb133b0ae. Seems a problem with signals, but without test cases I can't fix it for now. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=0baf709f0ae1ac8d8f1fd81b5111d2f5e38d4217 --- .../gui/qt4/components/playlist/playlist_model.cpp | 79 ++------------------ .../gui/qt4/components/playlist/playlist_model.hpp | 12 --- 2 files changed, 6 insertions(+), 85 deletions(-) diff --git a/modules/gui/qt4/components/playlist/playlist_model.cpp b/modules/gui/qt4/components/playlist/playlist_model.cpp index 3f75d9a..025f71b 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.cpp +++ b/modules/gui/qt4/components/playlist/playlist_model.cpp @@ -48,7 +48,6 @@ #include <QDesktopServices> #include <QInputDialog> #include <QSignalMapper> -#include <QTimer> #define I_NEW_DIR \ I_DIR_OR_FOLDER( N_("Create Directory"), N_( "Create Folder" ) ) @@ -101,7 +100,6 @@ PLModel::PLModel( playlist_t *_p_playlist, /* THEPL */ this, processItemAppend( int, int ) ); CONNECT( THEMIM, playlistItemRemoved( int ), this, processItemRemoval( int ) ); - CONNECT( &insertBufferCommitTimer, timeout(), this, commitBufferedRowInserts() ); } PLModel::~PLModel() @@ -630,68 +628,6 @@ void PLModel::processItemRemoval( int i_id ) removeItem( i_id ); } -void PLModel::commitBufferedRowInserts() -{ - PLItem *toemit = NULL; - insertBufferCommitTimer.stop(); - insertBufferMutex.lock(); - if ( !insertBuffer.isEmpty() ) - { - beginInsertRows( index( insertBufferRoot, 0 ), insertbuffer_firstrow, insertbuffer_lastrow ); - foreach (PLItem *item, insertBuffer) - { - insertBufferRoot->insertChild( item, insertbuffer_firstrow++ ); - if( item->inputItem() == THEMIM->currentInputItem() ) - toemit = item; - } - endInsertRows(); - insertBuffer.clear(); - } - insertBufferMutex.unlock(); - if ( toemit ) - emit currentIndexChanged( index( toemit, 0 ) ); -} - -/* - Tries to agregate linear inserts of single row. Sends - more efficient updates notifications to views and then - avoids the flickering effect. -*/ -void PLModel::bufferedRowInsert( PLItem *item, PLItem *parent, int pos ) -{ - insertBufferMutex.lock(); - if ( ! insertBuffer.isEmpty() ) - { - /* Check if we're doing linear insert */ - if ( parent != insertBufferRoot || pos != insertbuffer_lastrow + 1 ) - { - insertBufferMutex.unlock(); - commitBufferedRowInserts(); - bufferedRowInsert( item, parent, pos ); - return; - } - } - - if ( insertBuffer.isEmpty() ) - { - insertBuffer << item; - insertBufferRoot = parent; - insertbuffer_firstrow = pos; - insertbuffer_lastrow = pos; - } else { - insertBuffer << item; - insertbuffer_lastrow++; - } - insertBufferMutex.unlock(); - - /* Schedule commit */ - if ( ! insertBufferCommitTimer.isActive() ) - { - insertBufferCommitTimer.setSingleShot( true ); - insertBufferCommitTimer.start( 100 ); - } -} - void PLModel::processItemAppend( int i_item, int i_parent ) { playlist_item_t *p_item = NULL; @@ -721,7 +657,12 @@ void PLModel::processItemAppend( int i_item, int i_parent ) PL_UNLOCK; /* We insert the newItem (children) inside the parent */ - bufferedRowInsert( newItem, nodeParentItem, pos ); + beginInsertRows( index( nodeParentItem, 0 ), pos, pos ); + nodeParentItem->insertChild( newItem, pos ); + endInsertRows(); + + if( newItem->inputItem() == THEMIM->currentInputItem() ) + emit currentIndexChanged( index( newItem, 0 ) ); if( latestSearch.isEmpty() ) return; search( latestSearch, index( rootItem, 0), false /*FIXME*/ ); @@ -752,7 +693,6 @@ void PLModel::rebuild( playlist_item_t *p_root ) void PLModel::takeItem( PLItem *item ) { - commitBufferedRowInserts(); assert( item ); PLItem *parent = item->parent(); assert( parent ); @@ -765,7 +705,6 @@ void PLModel::takeItem( PLItem *item ) void PLModel::insertChildren( PLItem *node, QList<PLItem*>& items, int i_pos ) { - commitBufferedRowInserts(); assert( node ); int count = items.count(); if( !count ) return; @@ -781,7 +720,6 @@ void PLModel::insertChildren( PLItem *node, QList<PLItem*>& items, int i_pos ) void PLModel::removeItem( PLItem *item ) { if( !item ) return; - commitBufferedRowInserts(); i_cached_id = -1; i_cached_input_id = -1; @@ -884,9 +822,6 @@ void PLModel::sort( const int i_root_id, const int column, Qt::SortOrder order ) PLItem *item = findById( rootItem, i_root_id ); if( !item ) return; - - commitBufferedRowInserts(); - QModelIndex qIndex = index( item, 0 ); int count = item->childCount(); if( count ) @@ -933,8 +868,6 @@ void PLModel::search( const QString& search_text, const QModelIndex & idx, bool { latestSearch = search_text; - commitBufferedRowInserts(); - /** \todo Fire the search with a small delay ? */ PL_LOCK; { diff --git a/modules/gui/qt4/components/playlist/playlist_model.hpp b/modules/gui/qt4/components/playlist/playlist_model.hpp index 9eee44f..133928f 100644 --- a/modules/gui/qt4/components/playlist/playlist_model.hpp +++ b/modules/gui/qt4/components/playlist/playlist_model.hpp @@ -41,8 +41,6 @@ #include <QAbstractItemModel> #include <QVariant> #include <QModelIndex> -#include <QTimer> -#include <QMutex> class PLItem; class PLSelector; @@ -132,15 +130,6 @@ private: static QIcon icons[ITEM_TYPE_NUMBER]; - /* single row linear inserts agregation */ - void bufferedRowInsert( PLItem *item, PLItem *parent, int pos ); - PLItem *insertBufferRoot; - int insertbuffer_firstrow; - int insertbuffer_lastrow; - QTimer insertBufferCommitTimer; - QList<PLItem *> insertBuffer; - QMutex insertBufferMutex; - /* Custom model private methods */ /* Lookups */ QStringList selectedURIs(); @@ -203,7 +192,6 @@ private slots: void processInputItemUpdate( input_thread_t* p_input ); void processItemRemoval( int i_id ); void processItemAppend( int item, int parent ); - void commitBufferedRowInserts(); void activateItem( playlist_item_t *p_item ); void increaseZoom(); void decreaseZoom(); _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
