Loading libs/rs/rsContext.cpp +34 −26 Original line number Diff line number Diff line Loading @@ -113,14 +113,14 @@ void Context::deinitEGL() } bool Context::runScript(Script *s, uint32_t launchID) uint32_t Context::runScript(Script *s, uint32_t launchID) { ObjectBaseRef<ProgramFragment> frag(mFragment); ObjectBaseRef<ProgramVertex> vtx(mVertex); ObjectBaseRef<ProgramFragmentStore> store(mFragmentStore); ObjectBaseRef<ProgramRaster> raster(mRaster); bool ret = s->run(this, launchID); uint32_t ret = s->run(this, launchID); mFragment.set(frag); mVertex.set(vtx); Loading @@ -130,11 +130,9 @@ bool Context::runScript(Script *s, uint32_t launchID) } bool Context::runRootScript() uint32_t Context::runRootScript() { if (props.mLogTimes) { timerSet(RS_TIMER_CLEAR_SWAP); } rsAssert(mRootScript->mEnviroment.mIsRoot); eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_WIDTH, &mEGL.mWidth); Loading @@ -154,11 +152,9 @@ bool Context::runRootScript() glClear(GL_COLOR_BUFFER_BIT); } if (this->props.mLogTimes) { timerSet(RS_TIMER_SCRIPT); } mStateFragmentStore.mLast.clear(); bool ret = runScript(mRootScript.get(), 0); uint32_t ret = runScript(mRootScript.get(), 0); GLenum err = glGetError(); if (err != GL_NO_ERROR) { Loading Loading @@ -212,14 +208,20 @@ void Context::timerPrint() total += mTimers[ct]; } uint64_t frame = mTimeFrame - mTimeLastFrame; mTimeMSLastFrame = frame / 1000000; mTimeMSLastScript = mTimers[RS_TIMER_SCRIPT] / 1000000; mTimeMSLastSwap = mTimers[RS_TIMER_CLEAR_SWAP] / 1000000; LOGV("RS: Frame (%lli), Script %2.1f (%lli), Clear & Swap %2.1f (%lli), Idle %2.1f (%lli), Internal %2.1f (%lli)", frame / 1000000, 100.0 * mTimers[RS_TIMER_SCRIPT] / total, mTimers[RS_TIMER_SCRIPT] / 1000000, 100.0 * mTimers[RS_TIMER_CLEAR_SWAP] / total, mTimers[RS_TIMER_CLEAR_SWAP] / 1000000, if (props.mLogTimes) { LOGV("RS: Frame (%i), Script %2.1f (%i), Clear & Swap %2.1f (%i), Idle %2.1f (%lli), Internal %2.1f (%lli)", mTimeMSLastFrame, 100.0 * mTimers[RS_TIMER_SCRIPT] / total, mTimeMSLastScript, 100.0 * mTimers[RS_TIMER_CLEAR_SWAP] / total, mTimeMSLastSwap, 100.0 * mTimers[RS_TIMER_IDLE] / total, mTimers[RS_TIMER_IDLE] / 1000000, 100.0 * mTimers[RS_TIMER_INTERNAL] / total, mTimers[RS_TIMER_INTERNAL] / 1000000); } } void Context::setupCheck() { Loading @@ -242,6 +244,7 @@ void * Context::threadProc(void *vrsc) rsc->mNativeThreadId = gettid(); setpriority(PRIO_PROCESS, rsc->mNativeThreadId, ANDROID_PRIORITY_DISPLAY); rsc->mThreadPriority = ANDROID_PRIORITY_DISPLAY; rsc->props.mLogTimes = getProp("debug.rs.profile"); rsc->props.mLogScripts = getProp("debug.rs.script"); Loading Loading @@ -279,22 +282,26 @@ void * Context::threadProc(void *vrsc) mDraw &= (rsc->mRootScript.get() != NULL); mDraw &= (rsc->mWndSurface != NULL); uint32_t targetTime = 0; if (mDraw) { mDraw = rsc->runRootScript() && !rsc->mPaused; if (rsc->props.mLogTimes) { targetTime = rsc->runRootScript(); mDraw = targetTime && !rsc->mPaused; rsc->timerSet(RS_TIMER_CLEAR_SWAP); } eglSwapBuffers(rsc->mEGL.mDisplay, rsc->mEGL.mSurface); if (rsc->props.mLogTimes) { rsc->timerFrame(); rsc->timerSet(RS_TIMER_INTERNAL); rsc->timerPrint(); rsc->timerReset(); } } if (rsc->mObjDestroy.mNeedToEmpty) { rsc->objDestroyOOBRun(); } if (rsc->mThreadPriority > 0 && targetTime) { int32_t t = (targetTime - (int32_t)(rsc->mTimeMSLastScript + rsc->mTimeMSLastSwap)) * 1000; if (t > 0) { usleep(t); } } } LOGV("RS Thread exiting"); Loading Loading @@ -330,6 +337,7 @@ void Context::setPriority(int32_t p) // the wallpapers can become completly unresponsive at times. // This is probably not what we want for something the user is actively // looking at. mThreadPriority = p; #if 0 SchedPolicy pol = SP_FOREGROUND; if (p > 0) { Loading libs/rs/rsContext.h +6 −2 Original line number Diff line number Diff line Loading @@ -105,7 +105,7 @@ public: uint32_t getMessageToClient(void *data, size_t *receiveLen, size_t bufferLen, bool wait); bool sendMessageToClient(void *data, uint32_t cmdID, size_t len, bool waitForSpace); bool runScript(Script *s, uint32_t launchID); uint32_t runScript(Script *s, uint32_t launchID); void initToClient(); void deinitToClient(); Loading Loading @@ -194,6 +194,7 @@ protected: uint32_t mWidth; uint32_t mHeight; int32_t mThreadPriority; bool mRunning; bool mExit; Loading Loading @@ -226,7 +227,7 @@ private: void initEGL(); void deinitEGL(); bool runRootScript(); uint32_t runRootScript(); static void * threadProc(void *); Loading @@ -241,6 +242,9 @@ private: uint64_t mTimeLast; uint64_t mTimeFrame; uint64_t mTimeLastFrame; uint32_t mTimeMSLastFrame; uint32_t mTimeMSLastScript; uint32_t mTimeMSLastSwap; }; } Loading libs/rs/rsScript.h +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ public: virtual void setupScript() = 0; virtual bool run(Context *, uint32_t launchID) = 0; virtual uint32_t run(Context *, uint32_t launchID) = 0; }; Loading libs/rs/rsScriptC.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ void ScriptC::setupScript() } bool ScriptC::run(Context *rsc, uint32_t launchIndex) uint32_t ScriptC::run(Context *rsc, uint32_t launchIndex) { Context::ScriptTLSStruct * tls = (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); Loading @@ -85,9 +85,9 @@ bool ScriptC::run(Context *rsc, uint32_t launchIndex) } setupScript(); bool ret = false; uint32_t ret = 0; tls->mScript = this; ret = mProgram.mScript(launchIndex) != 0; ret = mProgram.mScript(launchIndex); tls->mScript = NULL; return ret; } Loading libs/rs/rsScriptC.h +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ public: ACCscript* mAccScript; virtual void setupScript(); virtual bool run(Context *, uint32_t launchID); virtual uint32_t run(Context *, uint32_t launchID); }; class ScriptCState Loading Loading
libs/rs/rsContext.cpp +34 −26 Original line number Diff line number Diff line Loading @@ -113,14 +113,14 @@ void Context::deinitEGL() } bool Context::runScript(Script *s, uint32_t launchID) uint32_t Context::runScript(Script *s, uint32_t launchID) { ObjectBaseRef<ProgramFragment> frag(mFragment); ObjectBaseRef<ProgramVertex> vtx(mVertex); ObjectBaseRef<ProgramFragmentStore> store(mFragmentStore); ObjectBaseRef<ProgramRaster> raster(mRaster); bool ret = s->run(this, launchID); uint32_t ret = s->run(this, launchID); mFragment.set(frag); mVertex.set(vtx); Loading @@ -130,11 +130,9 @@ bool Context::runScript(Script *s, uint32_t launchID) } bool Context::runRootScript() uint32_t Context::runRootScript() { if (props.mLogTimes) { timerSet(RS_TIMER_CLEAR_SWAP); } rsAssert(mRootScript->mEnviroment.mIsRoot); eglQuerySurface(mEGL.mDisplay, mEGL.mSurface, EGL_WIDTH, &mEGL.mWidth); Loading @@ -154,11 +152,9 @@ bool Context::runRootScript() glClear(GL_COLOR_BUFFER_BIT); } if (this->props.mLogTimes) { timerSet(RS_TIMER_SCRIPT); } mStateFragmentStore.mLast.clear(); bool ret = runScript(mRootScript.get(), 0); uint32_t ret = runScript(mRootScript.get(), 0); GLenum err = glGetError(); if (err != GL_NO_ERROR) { Loading Loading @@ -212,14 +208,20 @@ void Context::timerPrint() total += mTimers[ct]; } uint64_t frame = mTimeFrame - mTimeLastFrame; mTimeMSLastFrame = frame / 1000000; mTimeMSLastScript = mTimers[RS_TIMER_SCRIPT] / 1000000; mTimeMSLastSwap = mTimers[RS_TIMER_CLEAR_SWAP] / 1000000; LOGV("RS: Frame (%lli), Script %2.1f (%lli), Clear & Swap %2.1f (%lli), Idle %2.1f (%lli), Internal %2.1f (%lli)", frame / 1000000, 100.0 * mTimers[RS_TIMER_SCRIPT] / total, mTimers[RS_TIMER_SCRIPT] / 1000000, 100.0 * mTimers[RS_TIMER_CLEAR_SWAP] / total, mTimers[RS_TIMER_CLEAR_SWAP] / 1000000, if (props.mLogTimes) { LOGV("RS: Frame (%i), Script %2.1f (%i), Clear & Swap %2.1f (%i), Idle %2.1f (%lli), Internal %2.1f (%lli)", mTimeMSLastFrame, 100.0 * mTimers[RS_TIMER_SCRIPT] / total, mTimeMSLastScript, 100.0 * mTimers[RS_TIMER_CLEAR_SWAP] / total, mTimeMSLastSwap, 100.0 * mTimers[RS_TIMER_IDLE] / total, mTimers[RS_TIMER_IDLE] / 1000000, 100.0 * mTimers[RS_TIMER_INTERNAL] / total, mTimers[RS_TIMER_INTERNAL] / 1000000); } } void Context::setupCheck() { Loading @@ -242,6 +244,7 @@ void * Context::threadProc(void *vrsc) rsc->mNativeThreadId = gettid(); setpriority(PRIO_PROCESS, rsc->mNativeThreadId, ANDROID_PRIORITY_DISPLAY); rsc->mThreadPriority = ANDROID_PRIORITY_DISPLAY; rsc->props.mLogTimes = getProp("debug.rs.profile"); rsc->props.mLogScripts = getProp("debug.rs.script"); Loading Loading @@ -279,22 +282,26 @@ void * Context::threadProc(void *vrsc) mDraw &= (rsc->mRootScript.get() != NULL); mDraw &= (rsc->mWndSurface != NULL); uint32_t targetTime = 0; if (mDraw) { mDraw = rsc->runRootScript() && !rsc->mPaused; if (rsc->props.mLogTimes) { targetTime = rsc->runRootScript(); mDraw = targetTime && !rsc->mPaused; rsc->timerSet(RS_TIMER_CLEAR_SWAP); } eglSwapBuffers(rsc->mEGL.mDisplay, rsc->mEGL.mSurface); if (rsc->props.mLogTimes) { rsc->timerFrame(); rsc->timerSet(RS_TIMER_INTERNAL); rsc->timerPrint(); rsc->timerReset(); } } if (rsc->mObjDestroy.mNeedToEmpty) { rsc->objDestroyOOBRun(); } if (rsc->mThreadPriority > 0 && targetTime) { int32_t t = (targetTime - (int32_t)(rsc->mTimeMSLastScript + rsc->mTimeMSLastSwap)) * 1000; if (t > 0) { usleep(t); } } } LOGV("RS Thread exiting"); Loading Loading @@ -330,6 +337,7 @@ void Context::setPriority(int32_t p) // the wallpapers can become completly unresponsive at times. // This is probably not what we want for something the user is actively // looking at. mThreadPriority = p; #if 0 SchedPolicy pol = SP_FOREGROUND; if (p > 0) { Loading
libs/rs/rsContext.h +6 −2 Original line number Diff line number Diff line Loading @@ -105,7 +105,7 @@ public: uint32_t getMessageToClient(void *data, size_t *receiveLen, size_t bufferLen, bool wait); bool sendMessageToClient(void *data, uint32_t cmdID, size_t len, bool waitForSpace); bool runScript(Script *s, uint32_t launchID); uint32_t runScript(Script *s, uint32_t launchID); void initToClient(); void deinitToClient(); Loading Loading @@ -194,6 +194,7 @@ protected: uint32_t mWidth; uint32_t mHeight; int32_t mThreadPriority; bool mRunning; bool mExit; Loading Loading @@ -226,7 +227,7 @@ private: void initEGL(); void deinitEGL(); bool runRootScript(); uint32_t runRootScript(); static void * threadProc(void *); Loading @@ -241,6 +242,9 @@ private: uint64_t mTimeLast; uint64_t mTimeFrame; uint64_t mTimeLastFrame; uint32_t mTimeMSLastFrame; uint32_t mTimeMSLastScript; uint32_t mTimeMSLastSwap; }; } Loading
libs/rs/rsScript.h +1 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,7 @@ public: virtual void setupScript() = 0; virtual bool run(Context *, uint32_t launchID) = 0; virtual uint32_t run(Context *, uint32_t launchID) = 0; }; Loading
libs/rs/rsScriptC.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -60,7 +60,7 @@ void ScriptC::setupScript() } bool ScriptC::run(Context *rsc, uint32_t launchIndex) uint32_t ScriptC::run(Context *rsc, uint32_t launchIndex) { Context::ScriptTLSStruct * tls = (Context::ScriptTLSStruct *)pthread_getspecific(Context::gThreadTLSKey); Loading @@ -85,9 +85,9 @@ bool ScriptC::run(Context *rsc, uint32_t launchIndex) } setupScript(); bool ret = false; uint32_t ret = 0; tls->mScript = this; ret = mProgram.mScript(launchIndex) != 0; ret = mProgram.mScript(launchIndex); tls->mScript = NULL; return ret; } Loading
libs/rs/rsScriptC.h +1 −1 Original line number Diff line number Diff line Loading @@ -55,7 +55,7 @@ public: ACCscript* mAccScript; virtual void setupScript(); virtual bool run(Context *, uint32_t launchID); virtual uint32_t run(Context *, uint32_t launchID); }; class ScriptCState Loading