Skip to content

Commit

Permalink
Clean up memory
Browse files Browse the repository at this point in the history
  • Loading branch information
mhugent committed Dec 25, 2011
1 parent 4786279 commit 17e6afc
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 1 deletion.
1 change: 1 addition & 0 deletions src/core/raster/qgspalettedrasterrenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,5 @@ void QgsPalettedRasterRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort,
p->drawImage( tlPoint, img );
}
}
stopRasterRead( mBandNumber );
}
23 changes: 22 additions & 1 deletion src/core/raster/qgsrasterrenderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,12 @@ QgsRasterRenderer::QgsRasterRenderer( QgsRasterDataProvider* provider, QgsRaster

QgsRasterRenderer::~QgsRasterRenderer()
{
//remove remaining memory in partinfos
QMap<int, RasterPartInfo>::iterator partIt = mRasterPartInfos.begin();
for ( ; partIt != mRasterPartInfos.end(); ++partIt )
{
CPLFree( partIt.value().data );
}
}

void QgsRasterRenderer::startRasterRead( int bandNumber, QgsRasterViewPort* viewPort, const QgsMapToPixel* mapToPixel, double& oversampling )
Expand All @@ -35,6 +41,9 @@ void QgsRasterRenderer::startRasterRead( int bandNumber, QgsRasterViewPort* view
return;
}

//remove any previous part on that band
removePartInfo( bandNumber );

//calculate oversampling factor
if ( mResampler )
{
Expand All @@ -53,7 +62,7 @@ void QgsRasterRenderer::startRasterRead( int bandNumber, QgsRasterViewPort* view
pInfo.nCols = viewPort->drawableAreaXDim * oversampling;
pInfo.nRows = viewPort->drawableAreaYDim * oversampling;
int totalMemoryUsage = pInfo.nCols * pInfo.nRows * mProvider->dataTypeSize( bandNumber );
int parts = totalMemoryUsage / 100000000 /*10000*/ + 1;
int parts = totalMemoryUsage / /*100000000*/ 100000 + 1;
pInfo.nPartsPerDimension = sqrt( parts );
pInfo.nColsPerPart = pInfo.nCols / pInfo.nPartsPerDimension;
pInfo.nRowsPerPart = pInfo.nRows / pInfo.nPartsPerDimension;
Expand Down Expand Up @@ -124,4 +133,16 @@ bool QgsRasterRenderer::readNextRasterPart( int bandNumber, QgsRasterViewPort* v

void QgsRasterRenderer::stopRasterRead( int bandNumber )
{
removePartInfo( bandNumber );
}

void QgsRasterRenderer::removePartInfo( int bandNumber )
{
QMap<int, RasterPartInfo>::iterator partIt = mRasterPartInfos.find( bandNumber );
if ( partIt != mRasterPartInfos.end() )
{
RasterPartInfo& pInfo = partIt.value();
CPLFree( pInfo.data );
mRasterPartInfos.remove( bandNumber );
}
}
4 changes: 4 additions & 0 deletions src/core/raster/qgsrasterrenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,10 @@ class QgsRasterRenderer
QgsRasterDataProvider* mProvider;
QgsRasterResampler* mResampler;
QMap<int, RasterPartInfo> mRasterPartInfos;

private:
/**Remove part into and release memory*/
void removePartInfo( int bandNumer );
};

inline double QgsRasterRenderer::readValue( void *data, QgsRasterDataProvider::DataType type, int index )
Expand Down

0 comments on commit 17e6afc

Please sign in to comment.