diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-09-05 11:01:17 +0300 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2017-09-05 11:15:28 +0300 |
commit | 95de32aa7fbb1a2da547418b296f649ee4be1feb (patch) | |
tree | 50f81d2afc63357e7cfc18e2b23b1cd67e977a72 /py/tests/big_fb.py | |
parent | d6300fcfb0bc420ff30a6c8f44f9b5fe862cdb3d (diff) |
py: drop the fancy event handling
Unfortunately the nice event handler added previously doesn't work: we
may get multiple page-flip events, which would lead to unref'ing the
passed python object multiple times, leading to memory corruption.
I guess it's only possible to pass a plain int as user data to commit()
and page_flip().
Diffstat (limited to 'py/tests/big_fb.py')
-rwxr-xr-x | py/tests/big_fb.py | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/py/tests/big_fb.py b/py/tests/big_fb.py index 1642376..54de685 100755 --- a/py/tests/big_fb.py +++ b/py/tests/big_fb.py @@ -112,6 +112,7 @@ class bigFB_db: self.flips = 0 self.frames = 0 self.time = 0 + self.flip_count = 100 def new_color(self): r = random.randrange(255) @@ -190,7 +191,7 @@ class bigFB_db: screen_offset += mode.hdisplay - req.commit(self) + req.commit(0) def handle_page_flip_separate(self): self.draw_buf ^= 1 @@ -222,9 +223,16 @@ class bigFB_db: screen_offset += mode.hdisplay - req.commit(self) + req.commit(0) def handle_page_flip_main(self, frame, time): + self.flip_count += 1 + + if self.flip_count < len(conn_list): + return + + self.flip_count = 0 + # statistics self.flips += 1 if self.time == 0: @@ -254,31 +262,14 @@ box_db.handle_page_flip_main(0, 0) def readdrm(fileobj, mask): for ev in card.read_events(): if ev.type == pykms.DrmEventType.FLIP_COMPLETE: - ev.data.handle_page_flip_main(ev.seq, ev.time) - -event_counter = len(conn_list) -def readdrm_counted(fileobj, mask): - global event_counter - - for ev in card.read_events(): - if ev.type == pykms.DrmEventType.FLIP_COMPLETE: - # we expect events for each display (crtc), but only execute the - # next drawing and flip when we have received the last event. - event_counter -= 1 - if event_counter == 0: - event_counter = len(conn_list) - ev.data.handle_page_flip_main(ev.seq, ev.time) + box_db.handle_page_flip_main(ev.seq, ev.time) def readkey(fileobj, mask): sys.stdin.readline() exit(0) sel = selectors.DefaultSelector() -if args.flipmode == 'single': - sel.register(card.fd, selectors.EVENT_READ, readdrm) -else: - sel.register(card.fd, selectors.EVENT_READ, readdrm_counted) - +sel.register(card.fd, selectors.EVENT_READ, readdrm) sel.register(sys.stdin, selectors.EVENT_READ, readkey) while True: |