summaryrefslogtreecommitdiff
path: root/py/tests/big_fb.py
diff options
context:
space:
mode:
authorTomi Valkeinen <tomi.valkeinen@ti.com>2017-09-05 11:01:17 +0300
committerTomi Valkeinen <tomi.valkeinen@ti.com>2017-09-05 11:15:28 +0300
commit95de32aa7fbb1a2da547418b296f649ee4be1feb (patch)
tree50f81d2afc63357e7cfc18e2b23b1cd67e977a72 /py/tests/big_fb.py
parentd6300fcfb0bc420ff30a6c8f44f9b5fe862cdb3d (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-xpy/tests/big_fb.py33
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: