SirVer has proposed merging lp:~widelands-dev/widelands/memory_leak into 
lp:widelands.

Commit message:
Fix memory leak and extra work in UI::Table::draw.

On each frame we created a downscaled texture if the image of a table entry was 
too small and leaked this texture immediately. This extra scaling work we did 
there was even unnecessary since OpenGL can scale down images while blitting 
for free. 

Deleted that rescaling code, which makes the texture creation unnecessary, gets 
rid of the memory leak and also buys CPU cycles since a lot of work is now 
never done. 

Requested reviews:
  Widelands Developers (widelands-dev)
Related bugs:
  Bug #1535569 in widelands: "Messages window slows down game speed"
  https://bugs.launchpad.net/widelands/+bug/1535569

For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/memory_leak/+merge/283690
-- 
Your team Widelands Developers is requested to review the proposed merge of 
lp:~widelands-dev/widelands/memory_leak into lp:widelands.
=== modified file 'src/ui_basic/table.cc'
--- src/ui_basic/table.cc	2016-01-11 15:18:51 +0000
+++ src/ui_basic/table.cc	2016-01-22 20:09:24 +0000
@@ -283,7 +283,7 @@
 		Columns::size_type const nr_columns = m_columns.size();
 		for (uint32_t i = 0, curx = 0; i < nr_columns; ++i) {
 			const Column& column = m_columns[i];
-			int const curw  = column.width;
+			int const curw = column.width;
 			Align alignment = mirror_alignment(column.alignment);
 
 			const Image* entry_picture = er.get_picture(i);
@@ -291,11 +291,10 @@
 
 			Point point(curx, y);
 			int picw = 0;
-			int pich = 0;
 
-			if (entry_picture) {
+			if (entry_picture != nullptr) {
 				picw = entry_picture->width();
-				pich = entry_picture->height();
+				const int pich = entry_picture->height();
 
 				int draw_x = point.x;
 
@@ -319,22 +318,9 @@
 						draw_x += curw - blit_width;
 					}
 
-					// Temporary texture for the scaled image
-					Texture* scaled_texture = new Texture(blit_width, max_pic_height);
-
-					// Initialize the rectangle
-					scaled_texture->fill_rect(Rect(0, 0, blit_width, max_pic_height),
-									RGBAColor(255, 255, 255, 0));
-
 					// Create the scaled image
-					scaled_texture->blit(Rect(0, 0, blit_width, max_pic_height),
-							 *entry_picture,
-							 Rect(0, 0, picw, pich),
-							 1.,
-							 BlendMode::UseAlpha);
-
-					// This will now blit with any appropriate cropping
-					dst.blit(Point(draw_x, point.y + 1), scaled_texture);
+					dst.blitrect_scale(Rect(draw_x, point.y + 1, blit_width, max_pic_height),
+					                   entry_picture, Rect(0, 0, picw, pich), 1., BlendMode::UseAlpha);
 
 					// For text alignment below
 					picw = blit_width;

_______________________________________________
Mailing list: https://launchpad.net/~widelands-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~widelands-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to