from logging import info, debug
from os.path import exists
from os import makedirs
+from multiprocessing import cpu_count
from panda3d.core import Filename, load_prc_file_data, AntialiasAttrib, \
Texture, WindowProperties, LVector2i, TextNode
from panda3d.bullet import BulletWorld, BulletDebugNode
from ya2.utils.lang import LangMgr
from ya2.utils.log import LogMgr
from ya2.utils.functional import FunctionalTest
+from ya2.p3d.asserts import assert_threads, assert_tasks, assert_render3d, \
+ assert_render2d, assert_aspect2d, assert_events, assert_buffers
class MainFsm(FSM):
def exitMenu(self):
self._pmachines.on_menu_exit()
+ self.__do_asserts()
def enterScene(self, cls):
self._pmachines.on_scene_enter(cls)
def exitScene(self):
self._pmachines.on_scene_exit()
+ self.__do_asserts()
+
+ def __do_asserts(self):
+ args = self._pmachines._args
+ if not LibP3d.runtime() or args.functional_test or args.functional_ref:
+ assert_threads()
+ assert_tasks()
+ assert_render3d()
+ assert_render2d()
+ assert_aspect2d()
+ assert_events()
+ assert_buffers()
class PmachinesApp:
self._fsm.demand('Menu')
if args.functional_test or args.functional_ref:
FunctionalTest(args.functional_ref, self._pos_mgr)
+ if not LibP3d.runtime() or args.functional_test or args.functional_ref:
+ self.__fps_lst = []
+ taskMgr.do_method_later(1.0, self.__assert_fps, 'assert_fps')
def on_menu_enter(self):
self._menu_bg = Background()
self.reload,
self.scenes,
self._pos_mgr,
- self._args.functional_test or self._args.functional_ref)
+ self._args.functional_test or self._args.functional_ref,
+ self._options['development']['mouse_coords'])
def on_scene_exit(self):
self._unset_physics()
def _on_aspect_ratio_changed(self):
if self._fsm.state == 'Scene':
self._scene.on_aspect_ratio_changed()
+
+ def __assert_fps(self, task):
+ if len(self.__fps_lst) > 3:
+ self.__fps_lst.pop(0)
+ self.__fps_lst += [globalClock.average_frame_rate]
+ if len(self.__fps_lst) == 4:
+ fps_threshold = 55 if cpu_count() >= 4 else 25
+ assert(any(fps > fps_threshold for fps in self.__fps_lst), 'low fps %s' % self.__fps_lst)
+ return task.again