pull/171/head
FongMi 2 years ago
parent 96629742e6
commit b509551945
  1. 34
      danmaku/src/main/java/master/flame/danmaku/controller/CacheManagingDrawTask.java
  2. 2
      danmaku/src/main/java/master/flame/danmaku/danmaku/model/ICacheManager.java
  3. 1
      danmaku/src/main/java/master/flame/danmaku/danmaku/model/android/DrawingCacheHolder.java
  4. 5
      danmaku/src/main/java/master/flame/danmaku/danmaku/renderer/android/DanmakuRenderer.java
  5. 2
      danmaku/src/main/java/master/flame/danmaku/danmaku/util/DanmakuUtils.java

@ -251,6 +251,17 @@ public class CacheManagingDrawTask extends DrawTask {
}
}
@Override
public void buildDanmakuCache(BaseDanmaku danmaku) {
if (danmaku == null) {
return;
}
CacheHandler handler = mHandler;
if (handler != null) {
handler.addDanmakuAndBuildCache(danmaku);
}
}
public void invalidateDanmaku(BaseDanmaku danmaku) {
if (mHandler != null) {
mHandler.requestCancelCaching();
@ -375,7 +386,7 @@ public class CacheManagingDrawTask extends DrawTask {
private boolean push(BaseDanmaku item, int itemSize, boolean forcePush) {
if (itemSize > 0) clearTimeOutAndFilteredCaches(itemSize, forcePush);
this.mCaches.addItem(item);
mCaches.addItem(item);
mRealSize += itemSize;
return true;
}
@ -391,16 +402,6 @@ public class CacheManagingDrawTask extends DrawTask {
return ACTION_CONTINUE;
}
}
if (!mEndFlag) {
synchronized (mDrawingNotify) {
try {
mDrawingNotify.wait(30);
} catch (InterruptedException e) {
e.printStackTrace();
return ACTION_BREAK;
}
}
}
entryRemoved(val);
return ACTION_REMOVE;
} else {
@ -839,7 +840,11 @@ public class CacheManagingDrawTask extends DrawTask {
}
}
buildCache(item, false);
cache = item.getDrawingCache();
if (cache == null || cache.get() == null) {
buildCache(item, false);
}
if (!repositioned) {
long consumingTime = SystemClock.uptimeMillis() - startTime;
if (consumingTime >= DanmakuFactory.COMMON_DANMAKU_DURATION * mScreenSize) {
@ -921,7 +926,10 @@ public class CacheManagingDrawTask extends DrawTask {
}
IDrawingCache<?> cache = danmaku.getDrawingCache();
if (cache == null || cache.get() == null) {
buildCache(danmaku, true);
cache = danmaku.getDrawingCache();
if (cache == null || cache.get() == null) {
buildCache(danmaku, true);
}
}
}

@ -22,4 +22,6 @@ package master.flame.danmaku.danmaku.model;
public interface ICacheManager {
void addDanmaku(BaseDanmaku danmaku);
void buildDanmakuCache(BaseDanmaku danmaku);
}

@ -56,6 +56,7 @@ public class DrawingCacheHolder {
}
public synchronized void recycle() {
canvas = null;
Bitmap bitmapReserve = bitmap;
bitmap = null;
width = height = 0;

@ -161,6 +161,11 @@ public class DanmakuRenderer extends Renderer {
if (drawItem.lines == null && drawItem.getBottom() > disp.getHeight()) {
return ACTION_CONTINUE;
}
if (drawItem.getDrawingCache() == null || drawItem.getDrawingCache().get() == null) {
if (mCacheManager != null) {
mCacheManager.buildDanmakuCache(drawItem);
}
}
int renderingType = drawItem.draw(disp);
if (renderingType == IRenderer.CACHE_RENDERING) {
renderingState.cacheHitCount++;

@ -84,7 +84,7 @@ public class DanmakuUtils {
else if (val < 0) return -1;
int r = obj1.index - obj2.index;
if (r != 0) return r < 0 ? -1 : 1;
r = obj1.hashCode() - obj1.hashCode();
r = obj1.hashCode() - obj2.hashCode();
return r;
}

Loading…
Cancel
Save