fix(player): 优化上下滑切集黑屏
This commit is contained in:
1 parent
b83b5799e3
commit
222bacdeeb
10 files changed
+625
-122
No files matched your search
@@ -91,20 +91,63 @@ void main() {
|
||||
expect(session.preloadedIndex, 1);
|
||||
final loadingStates = <bool>[];
|
||||
session.addListener(() => loadingStates.add(session.loading));
|
||||
await session.select(1, preloadIndex: 2);
|
||||
await session.select(1, preloadIndex: 2, previousIndex: 0);
|
||||
await session.preloadSettled;
|
||||
expect(session.active, same(warm));
|
||||
expect(warm.initializeCalls, 1);
|
||||
expect(warm.playCalls, 1);
|
||||
expect(loadingStates, isNot(contains(true)));
|
||||
expect(activated, ['ep-0', 'ep-1']);
|
||||
expect(factory.peakLive, 2);
|
||||
expect(session.preparedPlayerAt(0), isNotNull);
|
||||
expect(session.preparedPlayerAt(2), isNotNull);
|
||||
expect(factory.peakLive, lessThanOrEqualTo(3));
|
||||
expect(factory.peakPlaying, 1);
|
||||
await session.close();
|
||||
expect(factory.live, 0);
|
||||
},
|
||||
);
|
||||
|
||||
test('should_prepare_previous_neighbor_when_selected', () async {
|
||||
final factory = _Factory();
|
||||
final session = PlaybackSession(
|
||||
episodes: episodes,
|
||||
factory: factory.create,
|
||||
canPlay: (_) => true,
|
||||
);
|
||||
await session.select(1, preloadIndex: 2, previousIndex: 0);
|
||||
await session.preloadSettled;
|
||||
expect(session.preparedPlayerAt(0), isNotNull);
|
||||
expect(session.preparedPlayerAt(2), isNotNull);
|
||||
expect(factory.players.map((player) => player.id).toSet(), {
|
||||
'ep-0',
|
||||
'ep-1',
|
||||
'ep-2',
|
||||
});
|
||||
expect(factory.peakLive, 3);
|
||||
await session.close();
|
||||
});
|
||||
|
||||
test('should_warm_previous_without_waiting_for_slow_next', () async {
|
||||
final nextGate = Completer<void>();
|
||||
final factory = _Factory(gates: {'ep-2': nextGate});
|
||||
final session = PlaybackSession(
|
||||
episodes: episodes,
|
||||
factory: factory.create,
|
||||
canPlay: (_) => true,
|
||||
);
|
||||
|
||||
await session.select(1, preloadIndex: 2, previousIndex: 0);
|
||||
await _tick();
|
||||
|
||||
expect(session.preparedPlayerAt(0), isNotNull);
|
||||
expect(session.preparedPlayerAt(2), isNull);
|
||||
|
||||
nextGate.complete();
|
||||
await session.preloadSettled;
|
||||
expect(session.preparedPlayerAt(2), isNotNull);
|
||||
await session.close();
|
||||
});
|
||||
|
||||
test('should_reuse_in_flight_preload_when_swiped_before_ready', () async {
|
||||
final gate = Completer<void>();
|
||||
final factory = _Factory(gates: {'ep-1': gate});
|
||||
@@ -124,7 +167,7 @@ void main() {
|
||||
await session.preloadSettled;
|
||||
expect(session.active, same(warm));
|
||||
expect(warm.initializeCalls, 1);
|
||||
expect(factory.peakLive, lessThanOrEqualTo(2));
|
||||
expect(factory.peakLive, lessThanOrEqualTo(3));
|
||||
expect(factory.peakPlaying, 1);
|
||||
await session.close();
|
||||
});
|
||||
@@ -149,7 +192,7 @@ void main() {
|
||||
expect(session.preloadedIndex, 2);
|
||||
expect(stale.playCalls, 0);
|
||||
expect(stale.disposed, isTrue);
|
||||
expect(factory.peakLive, lessThanOrEqualTo(2));
|
||||
expect(factory.peakLive, lessThanOrEqualTo(3));
|
||||
expect(factory.peakPlaying, 1);
|
||||
await session.close();
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user