Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit adee31f0 authored by Owen Lin's avatar Owen Lin Committed by Hung-ying Tyan
Browse files

Use TiledTexture for thumbnails.

1. Use TiledTexture for thumbnails to prevent jank in uploading big
   thumbnails. (e.g., 512 * 512)
2. Use larger thumbnails (DISPLAY_LONG_SIDE / 5).

bug: 7381302

Change-Id: I7661d648373e893b40b2a0304037171760091e00
parent c60752b2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -35,7 +35,7 @@ public class ImageCacheService {
    private static final String IMAGE_CACHE_FILE = "imgcache";
    private static final int IMAGE_CACHE_MAX_ENTRIES = 5000;
    private static final int IMAGE_CACHE_MAX_BYTES = 200 * 1024 * 1024;
    private static final int IMAGE_CACHE_VERSION = 6;
    private static final int IMAGE_CACHE_VERSION = 7;

    private BlobCache mCache;

+21 −14
Original line number Diff line number Diff line
@@ -58,7 +58,9 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
    private final ThreadPool mThreadPool;
    private final AlbumLabelMaker mLabelMaker;
    private final String mLoadingText;
    private final TextureUploader mTextureUploader;

    private final TiledTexture.Uploader mContentUploader;
    private final TextureUploader mLabelUploader;

    private int mActiveRequestCount = 0;
    private boolean mIsActive = false;
@@ -71,7 +73,7 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
        public MediaItem coverItem;
        public Texture content;
        public BitmapTexture labelTexture;
        public BitmapTexture bitmapTexture;
        public TiledTexture bitmapTexture;
        public Path setPath;
        public String title;
        public int totalCount;
@@ -96,7 +98,8 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {

        mLabelMaker = new AlbumLabelMaker(activity.getAndroidContext(), labelSpec);
        mLoadingText = activity.getAndroidContext().getString(R.string.loading);
        mTextureUploader = new TextureUploader(activity.getGLRoot());
        mContentUploader = new TiledTexture.Uploader(activity.getGLRoot());
        mLabelUploader = new TextureUploader(activity.getGLRoot());

        mHandler = new SynchronizedHandler(activity.getGLRoot()) {
            @Override
@@ -297,25 +300,26 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
        if (index < mContentStart || index >= mContentEnd) return;
        AlbumSetEntry entry = mData[index % mData.length];
        if (entry.bitmapTexture != null) {
            mTextureUploader.addBgTexture(entry.bitmapTexture);
            mContentUploader.addTexture(entry.bitmapTexture);
        }
        if (entry.labelTexture != null) {
            mTextureUploader.addBgTexture(entry.labelTexture);
            mLabelUploader.addBgTexture(entry.labelTexture);
        }
    }

    private void updateTextureUploadQueue() {
        if (!mIsActive) return;
        mTextureUploader.clear();
        mContentUploader.clear();
        mLabelUploader.clear();

        // Upload foreground texture
        for (int i = mActiveStart, n = mActiveEnd; i < n; ++i) {
            AlbumSetEntry entry = mData[i % mData.length];
            if (entry.bitmapTexture != null) {
                mTextureUploader.addFgTexture(entry.bitmapTexture);
                mContentUploader.addTexture(entry.bitmapTexture);
            }
            if (entry.labelTexture != null) {
                mTextureUploader.addFgTexture(entry.labelTexture);
                mLabelUploader.addFgTexture(entry.labelTexture);
            }
        }

@@ -389,7 +393,9 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {

    public void pause() {
        mIsActive = false;
        mTextureUploader.clear();
        mLabelUploader.clear();
        mContentUploader.clear();
        TiledTexture.freeResources();
        for (int i = mContentStart, n = mContentEnd; i < n; ++i) {
            freeSlotContent(i);
        }
@@ -398,6 +404,7 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {

    public void resume() {
        mIsActive = true;
        TiledTexture.prepareResources();
        for (int i = mContentStart, n = mContentEnd; i < n; ++i) {
            prepareSlotContent(i);
        }
@@ -440,17 +447,17 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
            if (bitmap == null) return; // error or recycled

            AlbumSetEntry entry = mData[mSlotIndex % mData.length];
            BitmapTexture texture = new BitmapTexture(bitmap);
            TiledTexture texture = new TiledTexture(bitmap);
            entry.bitmapTexture = texture;
            entry.content = texture;

            if (isActiveSlot(mSlotIndex)) {
                mTextureUploader.addFgTexture(texture);
                mContentUploader.addTexture(texture);
                --mActiveRequestCount;
                if (mActiveRequestCount == 0) requestNonactiveImages();
                if (mListener != null) mListener.onContentChanged();
            } else {
                mTextureUploader.addBgTexture(texture);
                mContentUploader.addTexture(texture);
            }
        }
    }
@@ -514,12 +521,12 @@ public class AlbumSetSlidingWindow implements AlbumSetDataLoader.DataListener {
            entry.labelTexture = texture;

            if (isActiveSlot(mSlotIndex)) {
                mTextureUploader.addFgTexture(texture);
                mLabelUploader.addFgTexture(texture);
                --mActiveRequestCount;
                if (mActiveRequestCount == 0) requestNonactiveImages();
                if (mListener != null) mListener.onContentChanged();
            } else {
                mTextureUploader.addBgTexture(texture);
                mLabelUploader.addBgTexture(texture);
            }
        }
    }
+10 −3
Original line number Diff line number Diff line
@@ -106,13 +106,20 @@ public class AlbumSetSlotRenderer extends AbstractSlotRenderer {
        }
    }

    private static Texture checkTexture(Texture texture) {
    private static Texture checkLabelTexture(Texture texture) {
        return ((texture instanceof UploadedTexture)
                && ((UploadedTexture) texture).isUploading())
                ? null
                : texture;
    }

    private static Texture checkContentTexture(Texture texture) {
        return ((texture instanceof TiledTexture)
                && !((TiledTexture) texture).isReady())
                ? null
                : texture;
    }

    @Override
    public int renderSlot(GLCanvas canvas, int index, int pass, int width, int height) {
        AlbumSetEntry entry = mDataWindow.get(index);
@@ -155,7 +162,7 @@ public class AlbumSetSlotRenderer extends AbstractSlotRenderer {
            GLCanvas canvas, AlbumSetEntry entry, int width, int height) {
        int renderRequestFlags = 0;

        Texture content = checkTexture(entry.content);
        Texture content = checkContentTexture(entry.content);
        if (content == null) {
            content = mWaitLoadingTexture;
            entry.isWaitLoadingDisplayed = true;
@@ -175,7 +182,7 @@ public class AlbumSetSlotRenderer extends AbstractSlotRenderer {

    protected int renderLabel(
            GLCanvas canvas, AlbumSetEntry entry, int width, int height) {
        Texture content = checkTexture(entry.labelTexture);
        Texture content = checkLabelTexture(entry.labelTexture);
        if (content == null) {
            content = mWaitLoadingTexture;
        }
+12 −11
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
        public int rotation;
        public int mediaType;
        public boolean isWaitDisplayed;
        public BitmapTexture bitmapTexture;
        public TiledTexture bitmapTexture;
        public Texture content;
        private BitmapLoader contentLoader;
        private PanoSupportListener mPanoSupportListener;
@@ -60,7 +60,7 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
    private final AlbumEntry mData[];
    private final SynchronizedHandler mHandler;
    private final JobLimiter mThreadPool;
    private final TextureUploader mTextureUploader;
    private final TiledTexture.Uploader mTileUploader;

    private int mSize;

@@ -103,7 +103,7 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
        };

        mThreadPool = new JobLimiter(activity.getThreadPool(), JOB_LIMIT);
        mTextureUploader = new TextureUploader(activity.getGLRoot());
        mTileUploader = new TiledTexture.Uploader(activity.getGLRoot());
    }

    public void setListener(Listener listener) {
@@ -181,20 +181,20 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
        if (index < mContentEnd && index >= mContentStart) {
            AlbumEntry entry = mData[index % mData.length];
            if (entry.bitmapTexture != null) {
                mTextureUploader.addBgTexture(entry.bitmapTexture);
                mTileUploader.addTexture(entry.bitmapTexture);
            }
        }
    }

    private void updateTextureUploadQueue() {
        if (!mIsActive) return;
        mTextureUploader.clear();
        mTileUploader.clear();

        // add foreground textures
        for (int i = mActiveStart, n = mActiveEnd; i < n; ++i) {
            AlbumEntry entry = mData[i % mData.length];
            if (entry.bitmapTexture != null) {
                mTextureUploader.addFgTexture(entry.bitmapTexture);
                mTileUploader.addTexture(entry.bitmapTexture);
            }
        }

@@ -313,18 +313,17 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {
        public void updateEntry() {
            Bitmap bitmap = getBitmap();
            if (bitmap == null) return; // error or recycled

            AlbumEntry entry = mData[mSlotIndex % mData.length];
            entry.bitmapTexture = new BitmapTexture(bitmap);
            entry.bitmapTexture = new TiledTexture(bitmap);
            entry.content = entry.bitmapTexture;

            if (isActiveSlot(mSlotIndex)) {
                mTextureUploader.addFgTexture(entry.bitmapTexture);
                mTileUploader.addTexture(entry.bitmapTexture);
                --mActiveRequestCount;
                if (mActiveRequestCount == 0) requestNonactiveImages();
                if (mListener != null) mListener.onContentChanged();
            } else {
                mTextureUploader.addBgTexture(entry.bitmapTexture);
                mTileUploader.addTexture(entry.bitmapTexture);
            }
        }
    }
@@ -353,6 +352,7 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {

    public void resume() {
        mIsActive = true;
        TiledTexture.prepareResources();
        for (int i = mContentStart, n = mContentEnd; i < n; ++i) {
            prepareSlotContent(i);
        }
@@ -361,7 +361,8 @@ public class AlbumSlidingWindow implements AlbumDataLoader.DataListener {

    public void pause() {
        mIsActive = false;
        mTextureUploader.clear();
        mTileUploader.clear();
        TiledTexture.freeResources();
        for (int i = mContentStart, n = mContentEnd; i < n; ++i) {
            freeSlotContent(i);
        }
+2 −2
Original line number Diff line number Diff line
@@ -89,8 +89,8 @@ public class AlbumSlotRenderer extends AbstractSlotRenderer {
    }

    private static Texture checkTexture(Texture texture) {
        return (texture instanceof UploadedTexture)
                && ((UploadedTexture) texture).isUploading()
        return (texture instanceof TiledTexture)
                && !((TiledTexture) texture).isReady()
                ? null
                : texture;
    }
Loading