fix(player): 收紧图片与快速切集资源占用
This commit is contained in:
1 parent
2fef7470e0
commit
80c962a95c
10 files changed
+281
-30
No files matched your search
@@ -75,7 +75,9 @@ void main() {
|
||||
expect(axis.cues, isEmpty);
|
||||
});
|
||||
|
||||
testWidgets('should_keep_only_two_decoded_sprites_in_lru', (tester) async {
|
||||
testWidgets('should_keep_one_sprite_and_reload_after_eviction', (
|
||||
tester,
|
||||
) async {
|
||||
final loader = _FakeSpriteLoader(vtt: _spriteVtt);
|
||||
final service = SpriteThumbnailAxisService(
|
||||
loader: loader,
|
||||
@@ -84,20 +86,37 @@ void main() {
|
||||
addTearDown(service.dispose);
|
||||
|
||||
await service.prepareAt('https://cdn.test/thumbnails.vtt', Duration.zero);
|
||||
expect(service.spriteCacheSize, 2);
|
||||
expect(
|
||||
service.spriteCacheKeys,
|
||||
containsAll(['sprite_001.jpg', 'sprite_002.jpg']),
|
||||
);
|
||||
|
||||
await service.prepareAt(
|
||||
'https://cdn.test/thumbnails.vtt',
|
||||
const Duration(milliseconds: 2500),
|
||||
);
|
||||
await service.prepareAt(
|
||||
'https://cdn.test/thumbnails.vtt',
|
||||
const Duration(milliseconds: 3500),
|
||||
);
|
||||
|
||||
expect(service.spriteCacheSize, 2);
|
||||
expect(service.spriteCacheKeys, contains('sprite_002.jpg'));
|
||||
expect(service.spriteCacheKeys, isNot(contains('sprite_001.jpg')));
|
||||
expect(service.spriteCacheSize, 1);
|
||||
expect(service.spriteCacheKeys, ['sprite_003.jpg']);
|
||||
expect(loader.images[0].debugDisposed, isTrue);
|
||||
expect(loader.images[1].debugDisposed, isTrue);
|
||||
expect(loader.images[2].debugDisposed, isFalse);
|
||||
expect(
|
||||
service.cachedFrameAt(
|
||||
'https://cdn.test/thumbnails.vtt',
|
||||
const Duration(milliseconds: 3500),
|
||||
),
|
||||
isNotNull,
|
||||
);
|
||||
|
||||
await service.prepareAt('https://cdn.test/thumbnails.vtt', Duration.zero);
|
||||
expect(service.spriteCacheSize, 1);
|
||||
expect(service.spriteCacheKeys, ['sprite_001.jpg']);
|
||||
expect(loader.images[2].debugDisposed, isTrue);
|
||||
expect(loader.images[3].debugDisposed, isFalse);
|
||||
expect(
|
||||
service.cachedFrameAt('https://cdn.test/thumbnails.vtt', Duration.zero),
|
||||
isNotNull,
|
||||
);
|
||||
});
|
||||
|
||||
testWidgets('should_cache_vtt_and_retry_once_after_403', (tester) async {
|
||||
@@ -229,6 +248,7 @@ class _FakeSpriteLoader implements SpriteThumbnailAssetLoader {
|
||||
final List<Object>? vttResponses;
|
||||
int vttCalls = 0;
|
||||
final List<String> spriteCalls = [];
|
||||
final List<ui.Image> images = [];
|
||||
|
||||
@override
|
||||
Future<String?> loadVtt(Uri uri) async {
|
||||
@@ -244,6 +264,7 @@ class _FakeSpriteLoader implements SpriteThumbnailAssetLoader {
|
||||
Future<SpriteThumbnailDecodedImage?> loadSprite(Uri uri) async {
|
||||
spriteCalls.add(uri.pathSegments.last);
|
||||
final image = await _createImage(320, 180);
|
||||
images.add(image);
|
||||
return SpriteThumbnailDecodedImage(
|
||||
image: image,
|
||||
originalWidth: 320,
|
||||
|
||||
Reference in new issue
Block a user