[vlc-devel] [vlc-commits] Revert "Qt: PLModel: try to agregate inserts for efficiency"

Ilkka Ollakka ileoo at videolan.org
Mon Jun 11 11:01:48 CEST 2012


On Mon, Jun 11, 2012 at 10:58:47AM +0200, Francois Cartegnie wrote:
> 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.

Hi,

For me the issues were there when I was using tree-like playlist instead
of flat one. With flat playlist it seemed to work properly. I think that
is why it also showed issues with upnp and directories.

> > 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
> vlc-commits at videolan.org
> http://mailman.videolan.org/listinfo/vlc-commits


-- 
Ilkka Ollakka
A new dramatist of the absurd
Has a voice that will shortly be heard.
	I learn from my spies
	He's about to devise
An unprintable three-letter word.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 490 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20120611/43b238f5/attachment.sig>


More information about the vlc-devel mailing list