[Scummvm-cvs-logs] SF.net SVN: scummvm:[49155] scummvm/trunk/backends/platform/psp

Bluddy at users.sourceforge.net Bluddy at users.sourceforge.net
Sun May 23 13:48:21 CEST 2010


Revision: 49155
          http://scummvm.svn.sourceforge.net/scummvm/?rev=49155&view=rev
Author:   Bluddy
Date:     2010-05-23 11:48:21 +0000 (Sun, 23 May 2010)

Log Message:
-----------
PSP: replaced SDL's timer with much simpler and more efficient PspTimer class

Modified Paths:
--------------
    scummvm/trunk/backends/platform/psp/Makefile
    scummvm/trunk/backends/platform/psp/audio.cpp
    scummvm/trunk/backends/platform/psp/display_manager.cpp
    scummvm/trunk/backends/platform/psp/module.mk
    scummvm/trunk/backends/platform/psp/osys_psp.cpp
    scummvm/trunk/backends/platform/psp/osys_psp.h
    scummvm/trunk/backends/platform/psp/psp_main.cpp

Added Paths:
-----------
    scummvm/trunk/backends/platform/psp/timer.cpp
    scummvm/trunk/backends/platform/psp/timer.h

Modified: scummvm/trunk/backends/platform/psp/Makefile
===================================================================
--- scummvm/trunk/backends/platform/psp/Makefile	2010-05-23 11:16:10 UTC (rev 49154)
+++ scummvm/trunk/backends/platform/psp/Makefile	2010-05-23 11:48:21 UTC (rev 49155)
@@ -148,7 +148,8 @@
 	trace.o \
 	psploader.o \
 	pspkeyboard.o \
-	audio.o
+	audio.o \
+	timer.o
 
 # Include common Scummvm makefile
 include $(srcdir)/Makefile.common

Modified: scummvm/trunk/backends/platform/psp/audio.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/audio.cpp	2010-05-23 11:16:10 UTC (rev 49154)
+++ scummvm/trunk/backends/platform/psp/audio.cpp	2010-05-23 11:48:21 UTC (rev 49155)
@@ -29,6 +29,7 @@
  
 #include "common/scummsys.h" 
 #include "backends/platform/psp/audio.h"
+#include "backends/platform/psp/thread.h"
 
 //#define __PSP_DEBUG_FUNCS__	/* For debugging function calls */
 //#define __PSP_DEBUG_PRINT__	/* For debug printouts */
@@ -93,7 +94,7 @@
 
 bool PspAudio::createThread() {
 	DEBUG_ENTER_FUNC();
-	int threadId = sceKernelCreateThread("audioThread", thread, 30, 16*1024, THREAD_ATTR_USER, 0); 
+	int threadId = sceKernelCreateThread("audioThread", thread, PRIORITY_AUDIO_THREAD, STACK_AUDIO_THREAD, THREAD_ATTR_USER, 0); 
 	
 	if (threadId < 0) {	// error
 		PSP_ERROR("failed to create audio thread. Error code %d\n", threadId);

Modified: scummvm/trunk/backends/platform/psp/display_manager.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/display_manager.cpp	2010-05-23 11:16:10 UTC (rev 49154)
+++ scummvm/trunk/backends/platform/psp/display_manager.cpp	2010-05-23 11:48:21 UTC (rev 49155)
@@ -34,6 +34,7 @@
 #include "backends/platform/psp/default_display_client.h"
 #include "backends/platform/psp/cursor.h"
 #include "backends/platform/psp/pspkeyboard.h"
+#include "backends/platform/psp/thread.h"
 
 #define USE_DISPLAY_CALLBACK	// to use callback for finishing the render
 #include "backends/platform/psp/display_manager.h"
@@ -64,7 +65,7 @@
 
 void MasterGuRenderer::setupCallbackThread() {
 	DEBUG_ENTER_FUNC();
-	int thid = sceKernelCreateThread("displayCbThread", guCallbackThread, 0x11, 4*1024, THREAD_ATTR_USER, 0);
+	int thid = sceKernelCreateThread("displayCbThread", guCallbackThread, PRIORITY_DISPLAY_THREAD, STACK_DISPLAY_THREAD, THREAD_ATTR_USER, 0);
 	
 	PSP_DEBUG_PRINT("Display CB thread id is %x\n", thid);
 	

Modified: scummvm/trunk/backends/platform/psp/module.mk
===================================================================
--- scummvm/trunk/backends/platform/psp/module.mk	2010-05-23 11:16:10 UTC (rev 49154)
+++ scummvm/trunk/backends/platform/psp/module.mk	2010-05-23 11:48:21 UTC (rev 49155)
@@ -13,7 +13,8 @@
 	trace.o \
 	psploader.o \
 	pspkeyboard.o \
-	audio.o
+	audio.o \
+	timer.o
 
 MODULE_DIRS += \
 	backends/platform/psp/

Modified: scummvm/trunk/backends/platform/psp/osys_psp.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/osys_psp.cpp	2010-05-23 11:16:10 UTC (rev 49154)
+++ scummvm/trunk/backends/platform/psp/osys_psp.cpp	2010-05-23 11:48:21 UTC (rev 49155)
@@ -60,9 +60,9 @@
 
 void OSystem_PSP::initSDL() {
 #ifdef USE_PSP_AUDIO
-	SDL_Init(SDL_INIT_TIMER);
+	SDL_Init(0);
 #else
-	SDL_Init(SDL_INIT_AUDIO | SDL_INIT_TIMER);
+	SDL_Init(SDL_INIT_AUDIO);
 #endif
 }
 
@@ -90,7 +90,7 @@
 	_inputHandler.init();
 
 	initSDL();
-
+	
 	_savefile = new PSPSaveFileManager;
 
 	_timer = new DefaultTimerManager();
@@ -308,7 +308,10 @@
 }
 
 void OSystem_PSP::setTimerCallback(TimerProc callback, int interval) {
-	SDL_SetTimer(interval, (SDL_TimerCallback)callback);
+	//SDL_SetTimer(interval, (SDL_TimerCallback)callback);
+	_pspTimer.setCallback((PspTimer::CallbackFunc)callback);
+	_pspTimer.setIntervalMs(interval);
+	_pspTimer.start();
 }
 
 OSystem::MutexRef OSystem_PSP::createMutex(void) {

Modified: scummvm/trunk/backends/platform/psp/osys_psp.h
===================================================================
--- scummvm/trunk/backends/platform/psp/osys_psp.h	2010-05-23 11:16:10 UTC (rev 49154)
+++ scummvm/trunk/backends/platform/psp/osys_psp.h	2010-05-23 11:48:21 UTC (rev 49155)
@@ -39,6 +39,7 @@
 #include "backends/platform/psp/display_manager.h"
 #include "backends/platform/psp/input.h"
 #include "backends/platform/psp/audio.h"
+#include "backends/platform/psp/timer.h"
 
 #include <SDL.h>
 
@@ -57,6 +58,7 @@
 	PSPKeyboard _keyboard;
 	InputHandler _inputHandler;
 	PspAudio _audio;
+	PspTimer _pspTimer;
 
 	void initSDL();
 

Modified: scummvm/trunk/backends/platform/psp/psp_main.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/psp_main.cpp	2010-05-23 11:16:10 UTC (rev 49154)
+++ scummvm/trunk/backends/platform/psp/psp_main.cpp	2010-05-23 11:48:21 UTC (rev 49155)
@@ -39,6 +39,7 @@
 #include <base/main.h>
 #include <base/plugins.h>
 #include "backends/platform/psp/powerman.h"
+#include "backends/platform/psp/thread.h"
 
 #include "backends/plugins/psp/psp-provider.h"
 #include "backends/platform/psp/psppixelformat.h"
@@ -140,7 +141,7 @@
 
 /* Sets up the callback thread and returns its thread id */
 int SetupCallbacks(void) {
-	int thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, THREAD_ATTR_USER, 0);
+	int thid = sceKernelCreateThread("power_thread", CallbackThread, PRIORITY_POWER_THREAD, STACK_POWER_THREAD, THREAD_ATTR_USER, 0);
 	if (thid >= 0) {
 		sceKernelStartThread(thid, 0, 0);
 	}

Added: scummvm/trunk/backends/platform/psp/timer.cpp
===================================================================
--- scummvm/trunk/backends/platform/psp/timer.cpp	                        (rev 0)
+++ scummvm/trunk/backends/platform/psp/timer.cpp	2010-05-23 11:48:21 UTC (rev 49155)
@@ -0,0 +1,80 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/backends/platform/psp/osys_psp.cpp $
+ * $Id: osys_psp.cpp 46126 2009-11-24 14:18:46Z fingolfin $
+ *
+ */
+
+#include <pspthreadman.h>
+
+#include "common/scummsys.h"
+#include "common/timer.h"
+#include "backends/platform/psp/thread.h"
+#include "backends/platform/psp/timer.h"
+
+//#define __PSP_DEBUG_FUNCS__	/* For debugging function calls */
+//#define __PSP_DEBUG_PRINT__	/* For debug printouts */
+
+#include "backends/platform/psp/trace.h"
+
+bool PspTimer::start() {
+	DEBUG_ENTER_FUNC();
+	
+	if (!_interval || !_callback)
+		return false;
+
+	_threadId = sceKernelCreateThread("timerThread", thread, PRIORITY_TIMER_THREAD, STACK_TIMER_THREAD, THREAD_ATTR_USER, 0);
+
+	if (_threadId < 0) {	// error
+		PSP_ERROR("failed to create timer thread. Error code %d\n", _threadId);
+		return false;
+	}
+	
+	PspTimer *_this = this;	// trick to get into context when the thread starts
+	_init = true;
+	
+	if (sceKernelStartThread(_threadId, sizeof(uint32 *), &_this) < 0) {
+		PSP_ERROR("failed to start thread %d\n", _threadId);
+		return false;
+	}
+	
+	PSP_DEBUG_PRINT("created timer thread[%x]\n", _threadId);
+	
+	return true;
+}
+
+int PspTimer::thread(SceSize, void *__this) {
+	DEBUG_ENTER_FUNC();
+	PspTimer *_this = *(PspTimer **)__this;		// get our this for the context
+	
+	_this->timerThread();
+	return 0;
+};
+
+void PspTimer::timerThread() {
+	DEBUG_ENTER_FUNC();
+	
+	while (_init) {
+		sceKernelDelayThread(_interval);
+		PSP_DEBUG_PRINT("calling callback!\n");
+		_callback();
+	}
+};


Property changes on: scummvm/trunk/backends/platform/psp/timer.cpp
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native

Added: scummvm/trunk/backends/platform/psp/timer.h
===================================================================
--- scummvm/trunk/backends/platform/psp/timer.h	                        (rev 0)
+++ scummvm/trunk/backends/platform/psp/timer.h	2010-05-23 11:48:21 UTC (rev 49155)
@@ -0,0 +1,47 @@
+/* ScummVM - Graphic Adventure Engine
+ *
+ * ScummVM is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * $URL: https://scummvm.svn.sourceforge.net/svnroot/scummvm/scummvm/trunk/backends/platform/psp/osys_psp.cpp $
+ * $Id: osys_psp.cpp 46126 2009-11-24 14:18:46Z fingolfin $
+ *
+ */
+
+#ifndef PSP_TIMER_H
+#define PSP_TIMER_H 
+ 
+class PspTimer {
+public:
+	typedef void (* CallbackFunc)(void);
+	PspTimer() : _callback(0), _interval(0), _threadId(-1), _init(false) {}
+	void stop() { _init = false; }
+	bool start();
+	~PspTimer() { stop(); }
+	void setCallback(CallbackFunc cb) { _callback = cb; }
+	void setIntervalMs(uint32 interval) { _interval = interval * 1000; }
+	static int thread(SceSize, void *__this);		// static thread to use as bridge
+	void timerThread();
+private:
+	CallbackFunc _callback;	// pointer to timer callback
+	uint32 _interval;
+	int _threadId;
+	bool _init;
+};
+
+#endif


Property changes on: scummvm/trunk/backends/platform/psp/timer.h
___________________________________________________________________
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list