Kaydet (Commit) 00f097b6 authored tarafından weigao's avatar weigao Kaydeden (comit) Markus Mohrhard

test patch of creating bitmap in render thread

Change-Id: Ic0879dba3ad6a80359931edb65f0b72c1cc4d597
üst f9d2de85
...@@ -171,6 +171,7 @@ void RenderAnimationThread::execute() ...@@ -171,6 +171,7 @@ void RenderAnimationThread::execute()
*/ */
renderFrame(); renderFrame();
} }
mpChart->mpRenderer->ReleaseScreenTextShapes();
} }
class RenderBenchMarkThread : public RenderThread class RenderBenchMarkThread : public RenderThread
...@@ -178,8 +179,13 @@ class RenderBenchMarkThread : public RenderThread ...@@ -178,8 +179,13 @@ class RenderBenchMarkThread : public RenderThread
public: public:
RenderBenchMarkThread(GL3DBarChart * pChart): RenderBenchMarkThread(GL3DBarChart * pChart):
RenderThread(pChart), RenderThread(pChart),
mbExecuting(false) mbExecuting(false),
miFrameCount(0)
{ {
osl_getSystemTime(&mafpsRenderStartTime);
osl_getSystemTime(&mafpsRenderEndTime);
osl_getSystemTime(&maScreenTextUpdateStartTime);
osl_getSystemTime(&maScreenTextUpdateEndTime);
} }
protected: protected:
virtual void execute() SAL_OVERRIDE; virtual void execute() SAL_OVERRIDE;
...@@ -190,6 +196,9 @@ private: ...@@ -190,6 +196,9 @@ private:
void MoveToDefault(); void MoveToDefault();
void MoveToCorner(); void MoveToCorner();
void ProcessScroll(); void ProcessScroll();
void UpdateScreenText();
void UpdateFPS();
int calcTimeInterval(TimeValue &startTime, TimeValue &endTime);
private: private:
glm::vec3 maStartPos; glm::vec3 maStartPos;
glm::vec3 maEndPos; glm::vec3 maEndPos;
...@@ -199,6 +208,12 @@ private: ...@@ -199,6 +208,12 @@ private:
glm::vec3 maStepDirection; glm::vec3 maStepDirection;
size_t mnStep; size_t mnStep;
size_t mnStepsTotal; size_t mnStepsTotal;
TimeValue mafpsRenderStartTime;
TimeValue mafpsRenderEndTime;
TimeValue maScreenTextUpdateStartTime;
TimeValue maScreenTextUpdateEndTime;
int miFrameCount;
OUString maFPS;
}; };
void RenderBenchMarkThread::MoveCamera() void RenderBenchMarkThread::MoveCamera()
...@@ -309,6 +324,53 @@ void RenderBenchMarkThread::ProcessMouseEvent() ...@@ -309,6 +324,53 @@ void RenderBenchMarkThread::ProcessMouseEvent()
} }
} }
int RenderBenchMarkThread::calcTimeInterval(TimeValue &startTime, TimeValue &endTime)
{
TimeValue aTime;
aTime.Seconds = endTime.Seconds - startTime.Seconds - 1;
aTime.Nanosec = 1000000000 + endTime.Nanosec - startTime.Nanosec;
aTime.Seconds += aTime.Nanosec / 1000000000;
aTime.Nanosec %= 1000000000;
return aTime.Seconds * 1000+aTime.Nanosec / 1000000;
}
void RenderBenchMarkThread::UpdateFPS()
{
int aDeltaMs = calcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime);
if(aDeltaMs >= 500)
{
osl_getSystemTime(&mafpsRenderEndTime);
aDeltaMs = calcTimeInterval(mafpsRenderStartTime, mafpsRenderEndTime);
int iFPS = miFrameCount * 1000 / aDeltaMs;
maFPS = OUString("Render FPS: ") + OUString::number(iFPS);
miFrameCount = 0;
osl_getSystemTime(&mafpsRenderStartTime);
}
osl_getSystemTime(&mafpsRenderEndTime);
#if 0
opengl3D::ScreenText tFPS(mpChart->mpRenderer.get(), *(mpChart->mpTextCache), mpChart->mTestString, 0);
opengl3D::TextCacheItem tmpTextCache = mpChart->mpTextCache->getText(mpChart->mTestString);
#else
opengl3D::ScreenText tFPS(mpChart->mpRenderer.get(), *(mpChart->mpTextCache), maFPS, 0);
opengl3D::TextCacheItem tmpTextCache = mpChart->mpTextCache->getText(maFPS);
#endif
float rectWidth = (float)tmpTextCache.maSize.Width() / (float)tmpTextCache.maSize.Height() * 0.05;
tFPS.setPosition(glm::vec2(-0.99f, 0.99f), glm::vec2(-0.99f + rectWidth, 0.89f));
tFPS.render();
}
void RenderBenchMarkThread::UpdateScreenText()
{
int aDeltaMs = calcTimeInterval(maScreenTextUpdateStartTime, maScreenTextUpdateEndTime);
if (aDeltaMs >= 20)
{
mpChart->mpRenderer->ReleaseScreenTextShapes();
UpdateFPS();
osl_getSystemTime(&maScreenTextUpdateStartTime);
}
osl_getSystemTime(&maScreenTextUpdateEndTime);
}
void RenderBenchMarkThread::execute() void RenderBenchMarkThread::execute()
{ {
while (true) while (true)
...@@ -317,6 +379,7 @@ void RenderBenchMarkThread::execute() ...@@ -317,6 +379,7 @@ void RenderBenchMarkThread::execute()
osl::MutexGuard aGuard(mpChart->maMutex); osl::MutexGuard aGuard(mpChart->maMutex);
if (mpChart->mbRenderDie) if (mpChart->mbRenderDie)
break; break;
UpdateScreenText();
ProcessMouseEvent(); ProcessMouseEvent();
renderFrame(); renderFrame();
} }
...@@ -328,6 +391,7 @@ void RenderBenchMarkThread::execute() ...@@ -328,6 +391,7 @@ void RenderBenchMarkThread::execute()
nTV.Nanosec = 1000000; nTV.Nanosec = 1000000;
osl_waitThread(&nTV); osl_waitThread(&nTV);
#endif #endif
miFrameCount++;
} }
} }
...@@ -534,6 +598,7 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer ...@@ -534,6 +598,7 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSer
maShapes.push_back(new opengl3D::Text(mpRenderer.get(), *mpTextCache, maShapes.push_back(new opengl3D::Text(mpRenderer.get(), *mpTextCache,
aCats[i], nId)); aCats[i], nId));
mTestString = aCats[i];
nId += ID_STEP; nId += ID_STEP;
p = static_cast<opengl3D::Text*>(&maShapes.back()); p = static_cast<opengl3D::Text*>(&maShapes.back());
aTopLeft.x = nXPos + TEXT_HEIGHT + 0.5 * BAR_SIZE_X; aTopLeft.x = nXPos + TEXT_HEIGHT + 0.5 * BAR_SIZE_X;
......
...@@ -137,6 +137,7 @@ private: ...@@ -137,6 +137,7 @@ private:
RenderEventType maRenderEvent; RenderEventType maRenderEvent;
sal_uInt32 mSelectBarId; sal_uInt32 mSelectBarId;
Point maClickPos; Point maClickPos;
OUString mTestString;
}; };
} }
......
...@@ -2115,7 +2115,7 @@ void OpenGL3DRenderer::ReleaseShapes() ...@@ -2115,7 +2115,7 @@ void OpenGL3DRenderer::ReleaseShapes()
ReleasePolygonShapes(); ReleasePolygonShapes();
ReleaseExtrude3DShapes(); ReleaseExtrude3DShapes();
ReleaseTextShapes(); ReleaseTextShapes();
ReleaseScreenTextShapes(); //ReleaseScreenTextShapes();
ReleaseBatchBarInfo(); ReleaseBatchBarInfo();
ReleaseTextShapesBatch(); ReleaseTextShapesBatch();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment