begin of the remove of the multiple thread in the openGl display system
This commit is contained in:
parent
74a4ca9e84
commit
de3cff6ad5
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
#include <ewol/EObject.h>
|
#include <ewol/EObject.h>
|
||||||
|
|
||||||
#define NB_BOUBLE_BUFFER (2)
|
#define NB_BOUBLE_BUFFER (1)
|
||||||
|
|
||||||
namespace ewol {
|
namespace ewol {
|
||||||
class Widget;
|
class Widget;
|
||||||
|
@ -90,29 +90,17 @@ void EWOL_NativeRegenerateDisplay(void);
|
|||||||
|
|
||||||
extern eventSpecialKey_ts specialCurrentKey;
|
extern eventSpecialKey_ts specialCurrentKey;
|
||||||
|
|
||||||
static void* BaseAppEntry(void* param)
|
static bool requestEndProcessing = false;
|
||||||
|
|
||||||
|
void ewolProcessInit(void)
|
||||||
{
|
{
|
||||||
bool requestEndProcessing = false;
|
requestEndProcessing = false;
|
||||||
EWOL_DEBUG("==> Init BThread (START)");
|
EWOL_DEBUG("==> Init BThread (START)");
|
||||||
|
|
||||||
EWOL_INFO("v" EWOL_VERSION_TAG_NAME);
|
EWOL_INFO("v" EWOL_VERSION_TAG_NAME);
|
||||||
EWOL_INFO("Build Date: " BUILD_TIME);
|
EWOL_INFO("Build Date: " BUILD_TIME);
|
||||||
|
|
||||||
etk::InitDefaultFolder("ewolApplNoName");
|
etk::InitDefaultFolder("ewolApplNoName");
|
||||||
|
|
||||||
/*
|
|
||||||
struct sched_param pr;
|
|
||||||
int ret = 9;
|
|
||||||
int policy;
|
|
||||||
pthread_getschedparam(pthread_self(), &policy, &pr);
|
|
||||||
EWOL_INFO("Child Thread Up PL" << policy << " PRI" << pr.sched_priority); //The result here
|
|
||||||
policy = SCHED_RR;
|
|
||||||
pr.sched_priority = 19;
|
|
||||||
pthread_setschedparam(pthread_self(), policy, &pr);
|
|
||||||
sleep(1);
|
|
||||||
pthread_getschedparam(pthread_self(), &policy, &pr);
|
|
||||||
EWOL_INFO("Child Thread Up PL" << policy << " PRI" << pr.sched_priority); //The result Set
|
|
||||||
*/
|
|
||||||
|
|
||||||
ewol::EObjectManager::Init();
|
ewol::EObjectManager::Init();
|
||||||
ewol::EObjectMessageMultiCast::Init();
|
ewol::EObjectMessageMultiCast::Init();
|
||||||
@ -122,13 +110,20 @@ static void* BaseAppEntry(void* param)
|
|||||||
ewol::InitFont();
|
ewol::InitFont();
|
||||||
ewol::shortCut::Init();
|
ewol::shortCut::Init();
|
||||||
APP_Init();
|
APP_Init();
|
||||||
int32_t countNbEvent = 0;
|
|
||||||
EWOL_DEBUG("==> Init BThread (END)");
|
EWOL_DEBUG("==> Init BThread (END)");
|
||||||
while(false == requestEndProcessing) {
|
}
|
||||||
ewol::threadMsg::threadMsgContent_ts data;
|
|
||||||
data.type = THREAD_JUST_DISPLAY;
|
|
||||||
|
void ewolProcessEvents(void)
|
||||||
|
{
|
||||||
|
int32_t nbEvent = 0;
|
||||||
|
//EWOL_DEBUG(" ******** Event");
|
||||||
|
ewol::threadMsg::threadMsgContent_ts data;
|
||||||
|
data.type = THREAD_JUST_DISPLAY;
|
||||||
|
while (ewol::threadMsg::WaitingMessage(androidJniMsg)>0)
|
||||||
|
{
|
||||||
|
nbEvent++;
|
||||||
ewol::threadMsg::WaitMessage(androidJniMsg, data);
|
ewol::threadMsg::WaitMessage(androidJniMsg, data);
|
||||||
countNbEvent++;
|
|
||||||
if (data.type != THREAD_JUST_DISPLAY) {
|
if (data.type != THREAD_JUST_DISPLAY) {
|
||||||
//EWOL_DEBUG("EVENT");
|
//EWOL_DEBUG("EVENT");
|
||||||
switch (data.type) {
|
switch (data.type) {
|
||||||
@ -202,17 +197,25 @@ static void* BaseAppEntry(void* param)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (0 == ewol::threadMsg::WaitingMessage(androidJniMsg)) {
|
|
||||||
if (countNbEvent > 0) {
|
|
||||||
if(true == ewol::threadMsg::HasDisplayDone(androidJniMsg)) {
|
|
||||||
int64_t localTime = GetCurrentTime();
|
|
||||||
ewol::widgetManager::PeriodicCall(localTime);
|
|
||||||
}
|
|
||||||
EWOL_NativeRegenerateDisplay();
|
|
||||||
countNbEvent = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
// pb here when dynamic widget ...
|
||||||
|
if (0 < nbEvent) {
|
||||||
|
ewolProcessRedraw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ewolProcessRedraw(void)
|
||||||
|
{
|
||||||
|
//EWOL_DEBUG(" ******** Redraw");
|
||||||
|
if(true == ewol::threadMsg::HasDisplayDone(androidJniMsg)) {
|
||||||
|
int64_t localTime = GetCurrentTime();
|
||||||
|
ewol::widgetManager::PeriodicCall(localTime);
|
||||||
|
}
|
||||||
|
EWOL_NativeRegenerateDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ewolProcessUnInit(void)
|
||||||
|
{
|
||||||
EWOL_DEBUG("==> Un-Init BThread (START)");
|
EWOL_DEBUG("==> Un-Init BThread (START)");
|
||||||
|
|
||||||
// unset all windows
|
// unset all windows
|
||||||
@ -228,6 +231,17 @@ static void* BaseAppEntry(void* param)
|
|||||||
ewol::EObjectManager::UnInit();
|
ewol::EObjectManager::UnInit();
|
||||||
ewol::eventInput::UnInit();
|
ewol::eventInput::UnInit();
|
||||||
EWOL_DEBUG("==> Un-Init BThread (END)");
|
EWOL_DEBUG("==> Un-Init BThread (END)");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static void* BaseAppEntry(void* param)
|
||||||
|
{
|
||||||
|
ewolProcessInit();
|
||||||
|
while(false == requestEndProcessing) {
|
||||||
|
ewolProcessEvents();
|
||||||
|
}
|
||||||
|
ewolProcessUnInit();
|
||||||
pthread_exit(NULL);
|
pthread_exit(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -263,18 +277,22 @@ bool isGlobalSystemInit = false;
|
|||||||
void EWOL_SystemStart(void)
|
void EWOL_SystemStart(void)
|
||||||
{
|
{
|
||||||
if (false == isGlobalSystemInit) {
|
if (false == isGlobalSystemInit) {
|
||||||
// create interface mutex :
|
// create message system ...
|
||||||
EWOL_DEBUG("Init thread message system");
|
EWOL_DEBUG("Init thread message system");
|
||||||
ewol::threadMsg::Init(androidJniMsg);
|
ewol::threadMsg::Init(androidJniMsg);
|
||||||
// init the thread :
|
#ifdef MODE_MULTY_THREAD
|
||||||
EWOL_DEBUG("Create the thread");
|
// init the thread :
|
||||||
pthread_attr_init(&androidJniThreadAttr);
|
EWOL_DEBUG("Create the thread");
|
||||||
pthread_attr_setdetachstate(&androidJniThreadAttr, PTHREAD_CREATE_JOINABLE);
|
pthread_attr_init(&androidJniThreadAttr);
|
||||||
//pthread_attr_setdetachstate(&androidJniThreadAttr, PTHREAD_CREATE_DETACHED);
|
pthread_attr_setdetachstate(&androidJniThreadAttr, PTHREAD_CREATE_JOINABLE);
|
||||||
//pthread_attr_setscope( &androidJniThreadAttr, PTHREAD_SCOPE_SYSTEM);
|
//pthread_attr_setdetachstate(&androidJniThreadAttr, PTHREAD_CREATE_DETACHED);
|
||||||
pthread_setname_np(androidJniThread, "ewol_basic_thread");
|
//pthread_attr_setscope( &androidJniThreadAttr, PTHREAD_SCOPE_SYSTEM);
|
||||||
pthread_create(&androidJniThread, &androidJniThreadAttr, BaseAppEntry, NULL);
|
pthread_setname_np(androidJniThread, "ewol_basic_thread");
|
||||||
//pthread_create(&androidJniThread, NULL, BaseAppEntry, NULL);
|
pthread_create(&androidJniThread, &androidJniThreadAttr, BaseAppEntry, NULL);
|
||||||
|
//pthread_create(&androidJniThread, NULL, BaseAppEntry, NULL);
|
||||||
|
#else
|
||||||
|
ewolProcessInit();
|
||||||
|
#endif
|
||||||
isGlobalSystemInit = true;
|
isGlobalSystemInit = true;
|
||||||
EWOL_DEBUG("Send Init message to the thread");
|
EWOL_DEBUG("Send Init message to the thread");
|
||||||
ewol::threadMsg::SendMessage(androidJniMsg, THREAD_INIT, ewol::threadMsg::MSG_PRIO_REAL_TIME);
|
ewol::threadMsg::SendMessage(androidJniMsg, THREAD_INIT, ewol::threadMsg::MSG_PRIO_REAL_TIME);
|
||||||
@ -288,10 +306,13 @@ void EWOL_SystemStop(void)
|
|||||||
if (true == isGlobalSystemInit) {
|
if (true == isGlobalSystemInit) {
|
||||||
isGlobalSystemInit = false;
|
isGlobalSystemInit = false;
|
||||||
ewol::threadMsg::SendMessage(androidJniMsg, THREAD_UN_INIT, ewol::threadMsg::MSG_PRIO_REAL_TIME);
|
ewol::threadMsg::SendMessage(androidJniMsg, THREAD_UN_INIT, ewol::threadMsg::MSG_PRIO_REAL_TIME);
|
||||||
|
#ifdef MODE_MULTY_THREAD
|
||||||
EWOL_DEBUG("Wait end of the thread ...");
|
EWOL_DEBUG("Wait end of the thread ...");
|
||||||
// Wait end of the thread
|
// Wait end of the thread
|
||||||
pthread_join(androidJniThread, NULL);
|
pthread_join(androidJniThread, NULL);
|
||||||
|
#else
|
||||||
|
ewolProcessUnInit();
|
||||||
|
#endif
|
||||||
ewol::threadMsg::UnInit(androidJniMsg);
|
ewol::threadMsg::UnInit(androidJniMsg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,9 +29,13 @@
|
|||||||
|
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
|
//#define MODE_MULTY_THREAD
|
||||||
|
|
||||||
void EWOL_SystemStart(void);
|
void EWOL_SystemStart(void);
|
||||||
void EWOL_SystemStop(void);
|
void EWOL_SystemStop(void);
|
||||||
|
|
||||||
|
void ewolProcessEvents(void);
|
||||||
|
void ewolProcessRedraw(void);
|
||||||
|
|
||||||
void EWOL_ThreadSetArchiveDir(int mode, const char* str);
|
void EWOL_ThreadSetArchiveDir(int mode, const char* str);
|
||||||
void EWOL_ThreadResize(int w, int h );
|
void EWOL_ThreadResize(int w, int h );
|
||||||
|
@ -1065,6 +1065,11 @@ void X11_Run(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(true == m_run) {
|
if(true == m_run) {
|
||||||
|
#ifdef MODE_MULTY_THREAD
|
||||||
|
|
||||||
|
#else
|
||||||
|
ewolProcessEvents();
|
||||||
|
#endif
|
||||||
#ifdef DEBUG_X11_EVENT
|
#ifdef DEBUG_X11_EVENT
|
||||||
EWOL_INFO("X11 Render...");
|
EWOL_INFO("X11 Render...");
|
||||||
#endif
|
#endif
|
||||||
|
@ -180,6 +180,14 @@ int32_t ewol::threadMsg::WaitingMessage(threadMsg_ts& messageData)
|
|||||||
return nbMessage;
|
return nbMessage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ewol::threadMsg::HaveMessage(threadMsg_ts& messageData)
|
||||||
|
{
|
||||||
|
if (0 < WaitingMessage(messageData)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void ewol::threadMsg::SendDisplayDone(threadMsg_ts& messageData)
|
void ewol::threadMsg::SendDisplayDone(threadMsg_ts& messageData)
|
||||||
{
|
{
|
||||||
if (false == messageData.isInit) {
|
if (false == messageData.isInit) {
|
||||||
|
@ -63,6 +63,7 @@ namespace ewol {
|
|||||||
void UnInit(threadMsg_ts& messageData);
|
void UnInit(threadMsg_ts& messageData);
|
||||||
bool WaitMessage(threadMsg_ts& messageData, threadMsgContent_ts &data);
|
bool WaitMessage(threadMsg_ts& messageData, threadMsgContent_ts &data);
|
||||||
int32_t WaitingMessage(threadMsg_ts& messageData);
|
int32_t WaitingMessage(threadMsg_ts& messageData);
|
||||||
|
bool HaveMessage(threadMsg_ts& messageData);
|
||||||
bool SendMessage(threadMsg_ts& messageData, uint32_t type, msgPriority_te prio = MSG_PRIO_NONE, void * data = NULL, uint32_t size = 0);
|
bool SendMessage(threadMsg_ts& messageData, uint32_t type, msgPriority_te prio = MSG_PRIO_NONE, void * data = NULL, uint32_t size = 0);
|
||||||
void SendDisplayDone(threadMsg_ts& messageData);
|
void SendDisplayDone(threadMsg_ts& messageData);
|
||||||
bool HasDisplayDone(threadMsg_ts& messageData);
|
bool HasDisplayDone(threadMsg_ts& messageData);
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit c99fd7ab48b54fcec32a0dceca43169e6cc2254d
|
Subproject commit 99e6413c795826d718199b174eec6e79bb7fc8de
|
Loading…
x
Reference in New Issue
Block a user