[vlc-commits] Revert "Qt: PLModel: try to agregate inserts for efficiency"
Francois Cartegnie
git at videolan.org
Mon Jun 11 10:58:47 CEST 2012
vlc | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | 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();
More information about the vlc-commits
mailing list