Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Negative index cut after fetch #348

Merged
merged 4 commits into from
Nov 22, 2023
Merged

Conversation

dhilt
Copy link
Owner

@dhilt dhilt commented Nov 22, 2023

The following log reveals a problem with indexes after fetch & render:

going to fetch 10 items started from index -13
resolved 7 items (index = -13, count = 10)
stat before new items render, pos: 42, size: 1020, bwd_p: 80, fwd_p: 320, default: 20, items: 31, range: [-3..27]
stat after new items render, pos: 42, size: 1160, bwd_p: 80, fwd_p: 320, default: 20, items: 38, range: [-14..27]
Full log
```
adapter: reload() of 1.6
fallback startIndex to settings.startIndex (1)
setting scroll position at 0 [cancelled]
   ~~~ WF Cycle 1-88 STARTED ~~~  
---=== loop 1-88-155 start
skipping fetch backward direction [initial loop]
forcing fetch forward direction [no item size]
fetch interval: [1..5]
fetch direction is "forward"
going to fetch 5 items started from index 1
resolved 5 items (index = 1, count = 5)
stat before new items render, pos: 0, size: 300, bwd_p: 0, fwd_p: 300, default: no, items: 0, range: no
⤵ 0 0ms 
skipping scroll 0 [pending]
default size has been updated: 20
stat after new items render, pos: 0, size: 400, bwd_p: 0, fwd_p: 300, default: 20, items: 5, range: [1..5]
skipping clip [initial cycle]
forward padding will be increased by 200 to fill the viewport
stat after paddings adjustments, pos: 0, size: 300, bwd_p: 0, fwd_p: 200, default: 20, items: 5, range: [1..5]
---=== loop 1-88-155 done, loop 1-88-156 start
start delta is 0
fetch interval: [-7..23]
fetch interval after Buffer flushing: [6..23]
fetch direction is "forward"
going to fetch 18 items started from index 6
resolved 18 items (index = 6, count = 18)
stat before new items render, pos: 0, size: 300, bwd_p: 0, fwd_p: 200, default: 20, items: 5, range: [1..5]
stat after new items render, pos: 0, size: 660, bwd_p: 0, fwd_p: 200, default: 20, items: 23, range: [1..23]
skipping clip [initial cycle]
stat after paddings adjustments, pos: 0, size: 460, bwd_p: 0, fwd_p: 0, default: 20, items: 23, range: [1..23]
first index = 1, delta = 0
---=== loop 1-88-156 done, loop 1-88-157 start
start delta is 0
fetch interval: [-7..23]
fetch interval after Buffer flushing: [-7..0]
going to fetch 8 items started from index -7
resolved 8 items (index = -7, count = 8)
stat before new items render, pos: 0, size: 460, bwd_p: 0, fwd_p: 0, default: 20, items: 23, range: [1..23]
stat after new items render, pos: 0, size: 620, bwd_p: 0, fwd_p: 0, default: 20, items: 31, range: [-7..23]
skipping clip [initial cycle]
stat after paddings adjustments, pos: 0, size: 620, bwd_p: 0, fwd_p: 0, default: 20, items: 31, range: [-7..23]
first index = 1, delta = 0
setting scroll position at 160
stat after scroll adjustment, pos: 160, size: 620, bwd_p: 0, fwd_p: 0, default: 20, items: 31, range: [-7..23]
---=== loop 1-88-157 done, loop 1-88-158 start
start delta is 160
fetch interval: [-7..23]
fetch interval after Buffer flushing: no
---=== loop 1-88-158 done
   ~~~ WF Cycle 1-88 FINALIZED ~~~  
skipping scroll 160 [synthetic]
⤵ 206 0ms 
   ~~~ WF Cycle 1-89 STARTED ~~~  
---=== loop 1-89-159 start
start delta is 160
fetch interval: [-5..25]
fetch interval after Buffer flushing: [24..25]
fetch interval after bufferSize adjustment: [24..28]
fetch direction is "forward"
going to fetch 5 items started from index 24
resolved 5 items (index = 24, count = 5)
stat before new items render, pos: 206, size: 620, bwd_p: 0, fwd_p: 0, default: 20, items: 31, range: [-7..23]
stat after new items render, pos: 206, size: 720, bwd_p: 0, fwd_p: 0, default: 20, items: 36, range: [-7..28]
looking for anti-forward items that are out of [-5..28] range
stat before clip (46), pos: 206, size: 720, bwd_p: 0, fwd_p: 0, default: 20, items: 36, range: [-7..28]
clipped 2 item(s) from Buffer, +40 fwd px, range: [-7..-6]
stat after clip, pos: 206, size: 720, bwd_p: 40, fwd_p: 0, default: 20, items: 34, range: [-5..28]
stat after paddings adjustments, pos: 206, size: 720, bwd_p: 40, fwd_p: 0, default: 20, items: 34, range: [-5..28]
first index = 3, delta = -6
---=== loop 1-89-159 done, loop 1-89-160 start
start delta is 160
fetch interval: [-5..25]
fetch interval after Buffer flushing: no
---=== loop 1-89-160 done
   ~~~ WF Cycle 1-89 FINALIZED ~~~  
⤵ 293 26ms / 14ms delay
⤵ 293 16ms triggered by timer set on 293
   ~~~ WF Cycle 1-90 STARTED ~~~  
---=== loop 1-90-161 start
start delta is 160
fetch interval: [0..30]
fetch interval after Buffer flushing: [29..30]
fetch interval after bufferSize adjustment: [29..33]
fetch direction is "forward"
going to fetch 5 items started from index 29
resolved 5 items (index = 29, count = 5)
stat before new items render, pos: 293, size: 720, bwd_p: 40, fwd_p: 0, default: 20, items: 34, range: [-5..28]
⤵ 420 20ms / 20ms delay
stat after new items render, pos: 420, size: 820, bwd_p: 40, fwd_p: 0, default: 20, items: 39, range: [-5..33]
looking for anti-forward items that are out of [0..33] range
stat before clip (47), pos: 420, size: 820, bwd_p: 40, fwd_p: 0, default: 20, items: 39, range: [-5..33]
clipped 5 item(s) from Buffer, +100 fwd px, range: [-5..-1]
stat after clip, pos: 420, size: 820, bwd_p: 140, fwd_p: 0, default: 20, items: 34, range: [0..33]
stat after paddings adjustments, pos: 420, size: 820, bwd_p: 140, fwd_p: 0, default: 20, items: 34, range: [0..33]
first index = 7, delta = -13
shift position due to fetch-render difference (127)
---=== loop 1-90-161 done, loop 1-90-162 start
start delta is 160
fetch interval: [6..36]
fetch interval after Buffer flushing: [34..36]
fetch interval after bufferSize adjustment: [34..38]
fetch direction is "forward"
going to fetch 5 items started from index 34
resolved 5 items (index = 34, count = 5)
stat before new items render, pos: 420, size: 820, bwd_p: 140, fwd_p: 0, default: 20, items: 34, range: [0..33]
stat after new items render, pos: 420, size: 920, bwd_p: 140, fwd_p: 0, default: 20, items: 39, range: [0..38]
looking for anti-forward items that are out of [6..38] range
stat before clip (48), pos: 420, size: 920, bwd_p: 140, fwd_p: 0, default: 20, items: 39, range: [0..38]
clipped 6 item(s) from Buffer, +120 fwd px, range: [0..5]
stat after clip, pos: 420, size: 920, bwd_p: 260, fwd_p: 0, default: 20, items: 33, range: [6..38]
stat after paddings adjustments, pos: 420, size: 920, bwd_p: 260, fwd_p: 0, default: 20, items: 33, range: [6..38]
first index = 14, delta = 0
---=== loop 1-90-162 done, loop 1-90-163 start
start delta is 160
fetch interval: [6..36]
fetch interval after Buffer flushing: no
---=== loop 1-90-163 done
   ~~~ WF Cycle 1-90 FINALIZED ~~~  
⤵ 420 21ms triggered by timer set on 420
   ~~~ WF Cycle 1-91 STARTED ~~~  
---=== loop 1-91-164 start
start delta is 160
fetch interval: [6..36]
fetch interval after Buffer flushing: no
---=== loop 1-91-164 done
   ~~~ WF Cycle 1-91 FINALIZED ~~~  
⤵ 494 30ms / 10ms delay
⤵ 494 12ms triggered by timer set on 494
   ~~~ WF Cycle 1-92 STARTED ~~~  
---=== loop 1-92-165 start
start delta is 160
fetch interval: [10..40]
fetch interval after Buffer flushing: [39..40]
fetch interval after bufferSize adjustment: [39..43]
fetch direction is "forward"
going to fetch 5 items started from index 39
resolved 5 items (index = 39, count = 5)
stat before new items render, pos: 494, size: 920, bwd_p: 260, fwd_p: 0, default: 20, items: 33, range: [6..38]
stat after new items render, pos: 494, size: 1020, bwd_p: 260, fwd_p: 0, default: 20, items: 38, range: [6..43]
looking for anti-forward items that are out of [10..43] range
stat before clip (49), pos: 494, size: 1020, bwd_p: 260, fwd_p: 0, default: 20, items: 38, range: [6..43]
clipped 4 item(s) from Buffer, +80 fwd px, range: [6..9]
stat after clip, pos: 494, size: 1020, bwd_p: 340, fwd_p: 0, default: 20, items: 34, range: [10..43]
stat after paddings adjustments, pos: 494, size: 1020, bwd_p: 340, fwd_p: 0, default: 20, items: 34, range: [10..43]
first index = 17, delta = -14
---=== loop 1-92-165 done, loop 1-92-166 start
start delta is 160
fetch interval: [10..40]
fetch interval after Buffer flushing: no
---=== loop 1-92-166 done
   ~~~ WF Cycle 1-92 FINALIZED ~~~  
⤵ 530 17ms / 23ms delay
⤵ 523 34ms delayed
⤵ 523 23ms triggered by timer set on 530
   ~~~ WF Cycle 1-93 STARTED ~~~  
---=== loop 1-93-167 start
start delta is 160
fetch interval: [11..41]
fetch interval after Buffer flushing: no
---=== loop 1-93-167 done
   ~~~ WF Cycle 1-93 FINALIZED ~~~  
⤴ 486 16ms / 24ms delay
⤴ 244 33ms delayed
⤴ 244 25ms triggered by timer set on 486
   ~~~ WF Cycle 1-94 STARTED ~~~  
---=== loop 1-94-168 start
start delta is 160
fetch interval: [-3..27]
fetch interval after Buffer flushing: [-3..9]
fetch direction is "backward"
going to fetch 13 items started from index -3
resolved 13 items (index = -3, count = 13)
stat before new items render, pos: 244, size: 1020, bwd_p: 340, fwd_p: 0, default: 20, items: 34, range: [10..43]
stat after new items render, pos: 244, size: 1280, bwd_p: 340, fwd_p: 0, default: 20, items: 47, range: [-3..43]
looking for anti-backward items that are out of [-3..27] range
stat before clip (50), pos: 244, size: 1280, bwd_p: 340, fwd_p: 0, default: 20, items: 47, range: [-3..43]
clipped 16 item(s) from Buffer, +320 bwd px, range: [28..43]
stat after clip, pos: 244, size: 1280, bwd_p: 340, fwd_p: 320, default: 20, items: 31, range: [-3..27]
stat after paddings adjustments, pos: 244, size: 1020, bwd_p: 80, fwd_p: 320, default: 20, items: 31, range: [-3..27]
first index = 5, delta = -4
---=== loop 1-94-168 done, loop 1-94-169 start
start delta is 160
fetch interval: [-3..27]
fetch interval after Buffer flushing: no
---=== loop 1-94-169 done
   ~~~ WF Cycle 1-94 FINALIZED ~~~  
⤴ 243 16ms / 24ms delay
⤴ 42 33ms delayed
⤴ 42 25ms triggered by timer set on 243
   ~~~ WF Cycle 1-95 STARTED ~~~  
---=== loop 1-95-170 start
start delta is 160
fetch interval: [-13..17]
fetch interval after Buffer flushing: [-13..-4]
fetch direction is "backward"
going to fetch 10 items started from index -13
resolved 7 items (index = -13, count = 10)
stat before new items render, pos: 42, size: 1020, bwd_p: 80, fwd_p: 320, default: 20, items: 31, range: [-3..27]
stat after new items render, pos: 42, size: 1160, bwd_p: 80, fwd_p: 320, default: 20, items: 38, range: [-14..27]
looking for anti-backward items that are out of [-13..17] range
skipping clip [no items to clip]
stat after paddings adjustments, pos: 42, size: 760, bwd_p: 0, fwd_p: 0, default: 20, items: 38, range: [-14..27]
first index = -5, delta = -2
skipping scroll 0 [pre-synthetic]
setting scroll position at 98
stat after scroll adjustment (-42), pos: 98, size: 760, bwd_p: 0, fwd_p: 0, default: 20, items: 38, range: [-14..27]
---=== loop 1-95-170 done, loop 1-95-171 start
start delta is 300
fetch interval: [-17..-8]
fetch interval after Buffer flushing: [-17..-15]
fetch interval after bufferSize adjustment: [-19..-15]
fetch direction is "backward"
going to fetch 5 items started from index -19
resolved 0 items (index = -19, count = 5)
---=== loop 1-95-171 done
   ~~~ WF Cycle 1-95 FINALIZED ~~~  
synthetic scroll has been fulfilled: 0 < 98
⤴ 0 34ms / 6ms delay
⤴ 0 6ms triggered by timer set on 0
   ~~~ WF Cycle 1-96 STARTED ~~~  
---=== loop 1-96-172 start
start delta is 300
fetch interval: [-14..-8]
fetch interval after Buffer flushing: no
---=== loop 1-96-172 done
   ~~~ WF Cycle 1-96 FINALIZED ~~~  
adapter: showLog()
```

Expecting result after render should be [-10..27].

This PR provides the relevant test specification, reproducing the case.

@dhilt dhilt merged commit 80535d2 into master Nov 22, 2023
2 checks passed
@dhilt dhilt deleted the issue--negative-index-cut-after-fetch branch November 22, 2023 21:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant