SuchABot has uploaded a new change for review. https://gerrit.wikimedia.org/r/68662
Change subject: Maintain max width / height info to speed up image downloading ...................................................................... Maintain max width / height info to speed up image downloading If we ever download an image's original, we'll save its width and height. This ensures that we don't try to fetch thumbnails that are larger than the image itself too often, reducing 500s and improving performance much. TODO: Save image's width / height during upload process itself Change-Id: Ice11cfabab96999b0d07b965d4515b47c1fff428 GitHub: https://github.com/wikimedia/apps-android-commons/pull/8 --- M commons/src/main/java/org/wikimedia/commons/Media.java M commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java M commons/src/main/java/org/wikimedia/commons/category/Category.java M commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java M commons/src/main/java/org/wikimedia/commons/data/DBOpenHelper.java 5 files changed, 70 insertions(+), 7 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/commons refs/changes/62/68662/1 diff --git a/commons/src/main/java/org/wikimedia/commons/Media.java b/commons/src/main/java/org/wikimedia/commons/Media.java index cfe177c..9ff0126 100644 --- a/commons/src/main/java/org/wikimedia/commons/Media.java +++ b/commons/src/main/java/org/wikimedia/commons/Media.java @@ -103,6 +103,22 @@ return Utils.makeThumbUrl(imageUrl, filename, width); } + public int getWidth() { + return width; + } + + public void setWidth(int width) { + this.width = width; + } + + public int getHeight() { + return height; + } + + public void setHeight(int height) { + this.height = height; + } + protected Uri localUri; protected String imageUrl; protected String filename; @@ -110,6 +126,8 @@ protected long dataLength; protected Date dateCreated; protected Date dateUploaded; + protected int width; + protected int height; protected String creator; diff --git a/commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java b/commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java index afa95d8..c69fe55 100644 --- a/commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java +++ b/commons/src/main/java/org/wikimedia/commons/MediaWikiImageView.java @@ -27,6 +27,8 @@ import com.android.volley.toolbox.ImageLoader; import com.android.volley.toolbox.ImageLoader.ImageContainer; import com.android.volley.toolbox.ImageLoader.ImageListener; +import org.wikimedia.commons.contributions.Contribution; +import org.wikimedia.commons.contributions.ContributionsContentProvider; public class MediaWikiImageView extends ImageView { @@ -86,7 +88,15 @@ // Possible a similar size image has already been generated. // Reduces Server cache fragmentation, also increases chance of cache hit // If width is less than 320, we just use that directly, to avoid a case of the Maths - mUrl = mMedia.getThumbnailUrl(width <= 320 ? width : (width / 320) * 320); + int bucketedWidth = width <= 320 ? width: (width / 320) * 320; + if(mMedia.getWidth() != -0 && mMedia.getWidth() < bucketedWidth) { + // If we know that the width of the image is lesser than the required width + // We don't even try to load the thumbnai, go directly to the source + loadImageIfNecessary(isInLayoutPass, true); + return; + } else { + mUrl = mMedia.getThumbnailUrl(width <= 320 ? width : (width / 320) * 320); + } } // if the URL to be loaded in this view is empty, cancel any old requests and clear the @@ -151,11 +161,15 @@ return; } - - Log.d("Commons", "No-Error: For Url " + mUrl + " value is " + tryOriginal); - if (response.getBitmap() != null) { setImageBitmap(response.getBitmap()); + if(tryOriginal && mMedia instanceof Contribution && response.getBitmap().getWidth() > mMedia.getWidth() || response.getBitmap().getHeight() > mMedia.getHeight()) { + // If there is no width information for this image, save it. This speeds up image loading massively for smaller images + mMedia.setHeight(response.getBitmap().getHeight()); + mMedia.setWidth(response.getBitmap().getWidth()); + ((Contribution)mMedia).setContentProviderClient(MediaWikiImageView.this.getContext().getContentResolver().acquireContentProviderClient(ContributionsContentProvider.AUTHORITY)); + ((Contribution)mMedia).save(); + } if(loadingView != null) { loadingView.setVisibility(View.GONE); } diff --git a/commons/src/main/java/org/wikimedia/commons/category/Category.java b/commons/src/main/java/org/wikimedia/commons/category/Category.java index ae20458..8aaf7e2 100644 --- a/commons/src/main/java/org/wikimedia/commons/category/Category.java +++ b/commons/src/main/java/org/wikimedia/commons/category/Category.java @@ -134,6 +134,14 @@ if(from == 4) { // table added in version 5 onCreate(db); + from++; + onUpdate(db, from, to); + return; + } + if(from == 5) { + from++; + onUpdate(db, from, to); + return; } } } diff --git a/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java b/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java index c10727f..25e0554 100644 --- a/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java +++ b/commons/src/main/java/org/wikimedia/commons/contributions/Contribution.java @@ -189,6 +189,8 @@ cv.put(Table.COLUMN_DESCRIPTION, description); cv.put(Table.COLUMN_CREATOR, creator); cv.put(Table.COLUMN_MULTIPLE, isMultiple ? 1 : 0); + cv.put(Table.COLUMN_WIDTH, width); + cv.put(Table.COLUMN_HEIGHT, height); return cv; } @@ -220,6 +222,9 @@ c.description = cursor.getString(10); c.creator = cursor.getString(11); c.isMultiple = cursor.getInt(12) == 1; + c.width = cursor.getInt(13); + c.height = cursor.getInt(14); + return c; } @@ -252,6 +257,8 @@ public static final String COLUMN_DESCRIPTION = "description"; public static final String COLUMN_CREATOR = "creator"; // Initial uploader public static final String COLUMN_MULTIPLE = "multiple"; + public static final String COLUMN_WIDTH = "width"; + public static final String COLUMN_HEIGHT = "height"; // NOTE! KEEP IN SAME ORDER AS THEY ARE DEFINED UP THERE. HELPS HARD CODE COLUMN INDICES. public static final String[] ALL_FIELDS = { @@ -267,7 +274,9 @@ COLUMN_SOURCE, COLUMN_DESCRIPTION, COLUMN_CREATOR, - COLUMN_MULTIPLE + COLUMN_MULTIPLE, + COLUMN_WIDTH, + COLUMN_HEIGHT }; @@ -284,7 +293,9 @@ + "source STRING," + "description STRING," + "creator STRING," - + "multiple INTEGER" + + "multiple INTEGER," + + "width INTEGER," + + "height INTEGER" + ");"; @@ -313,11 +324,23 @@ if(from == 3) { // Do nothing from++; + onUpdate(db, from, to); return; } if(from == 4) { // Do nothing -- added Category from++; + onUpdate(db, from, to); + return; + } + if(from == 5) { + // Added width and height fields + db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN width INTEGER;"); + db.execSQL("UPDATE " + TABLE_NAME + " SET width = 0"); + db.execSQL("ALTER TABLE " + TABLE_NAME + " ADD COLUMN height INTEGER;"); + db.execSQL("UPDATE " + TABLE_NAME + " SET height = 0"); + from++; + onUpdate(db, from, to); return; } } diff --git a/commons/src/main/java/org/wikimedia/commons/data/DBOpenHelper.java b/commons/src/main/java/org/wikimedia/commons/data/DBOpenHelper.java index 4430ac5..af68065 100644 --- a/commons/src/main/java/org/wikimedia/commons/data/DBOpenHelper.java +++ b/commons/src/main/java/org/wikimedia/commons/data/DBOpenHelper.java @@ -10,7 +10,7 @@ public class DBOpenHelper extends SQLiteOpenHelper{ private static final String DATABASE_NAME = "commons.db"; - private static final int DATABASE_VERSION = 5; + private static final int DATABASE_VERSION = 6; public DBOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); -- To view, visit https://gerrit.wikimedia.org/r/68662 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ice11cfabab96999b0d07b965d4515b47c1fff428 Gerrit-PatchSet: 1 Gerrit-Project: apps/android/commons Gerrit-Branch: master Gerrit-Owner: SuchABot <[email protected]> Gerrit-Reviewer: Yuvipanda <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
