From cd6029f2373c67ab39313fd6314610becb5095c5 Mon Sep 17 00:00:00 2001 From: weigao Date: Sat, 19 Jul 2014 20:12:37 +0800 Subject: add benchmark render thread Change-Id: I0770db8e2cb5ecb1ef7d3706082196a8fd8f1ede --- chart2/source/view/charttypes/GL3DBarChart.cxx | 79 +++++++++++++++++++++++++- chart2/source/view/inc/GL3DBarChart.hxx | 2 + 2 files changed, 80 insertions(+), 1 deletion(-) (limited to 'chart2') diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 62e5ec952ffb..733d46fefd7a 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -19,6 +19,13 @@ #include #include +#include +#ifdef WNT +#include +#endif + +#define BENCH_MARK_MODE 1 + using namespace com::sun::star; namespace chart { @@ -125,6 +132,57 @@ void RenderAnimationThread::execute() } } +class RenderBenchMarkThread : public RenderThread +{ +public: + RenderBenchMarkThread(GL3DBarChart * pChart): + RenderThread(pChart) + { + } + void SetAnimationCamera(glm::vec3 startPos, glm::vec3 endPos, sal_Int32 steps); +protected: + virtual void execute() SAL_OVERRIDE; +private: + void ProcessMouseEvent(); +private: + glm::vec3 maStartPos; + glm::vec3 maEndPos; + sal_Int32 mnSteps; +}; + +void RenderBenchMarkThread::SetAnimationCamera(glm::vec3 startPos, glm::vec3 endPos, sal_Int32 steps) +{ + maStartPos = startPos; + maEndPos = endPos; + mnSteps = steps; +} + +void RenderBenchMarkThread::ProcessMouseEvent() +{ +} + +void RenderBenchMarkThread::execute() +{ + while (true) + { + { + osl::MutexGuard aGuard(mpChart->maMutex); + if (mpChart->mbRenderDie) + break; + ProcessMouseEvent(); + renderFrame(); + } + #ifdef WNT + Sleep(1); + #else + TimeValue nTV; + nTV.Seconds = 0; + nTV.Nanosec = 1000000; + osl_waitThread(&nTV); + #endif + } +} + GL3DBarChart::GL3DBarChart( const css::uno::Reference& xChartType, OpenGLWindow& rWindow) : @@ -140,7 +198,8 @@ GL3DBarChart::GL3DBarChart( mnCornerId(0), mbBlockUserInput(false), mbNeedsNewRender(true), - mbCameraInit(false) + mbCameraInit(false), + mbRenderDie(false) { Size aSize = mrWindow.GetSizePixel(); mpRenderer->SetSize(aSize); @@ -159,6 +218,11 @@ GL3DBarChart::BarInformation::BarInformation(const glm::vec3& rPos, float nVal, GL3DBarChart::~GL3DBarChart() { + if (BENCH_MARK_MODE) + { + osl::MutexGuard aGuard(maMutex); + mbRenderDie = true; + } if(mpRenderThread.is()) mpRenderThread->join(); osl::MutexGuard aGuard(maMutex); @@ -396,11 +460,21 @@ void GL3DBarChart::create3DShapes(const boost::ptr_vector& rDataSer mpCamera->setPosition(maCameraPosition); mpCamera->setDirection(maCameraDirection); } + if (BENCH_MARK_MODE && (!mpRenderThread.is())) + { + Size aSize = mrWindow.GetSizePixel(); + mrWindow.getContext().setWinSize(aSize); + mpRenderThread = rtl::Reference(new RenderBenchMarkThread(this)); + mrWindow.getContext().resetCurrent(); + mpRenderThread->launch(); + } mbNeedsNewRender = true; } void GL3DBarChart::update() { + if (BENCH_MARK_MODE) + return; if(mpRenderThread.is()) mpRenderThread->join(); Size aSize = mrWindow.GetSizePixel(); @@ -408,6 +482,7 @@ void GL3DBarChart::update() mpRenderThread = rtl::Reference(new RenderOneFrameThread(this)); mrWindow.getContext().resetCurrent(); mpRenderThread->launch(); + } namespace { @@ -515,6 +590,8 @@ void GL3DBarChart::clickedAt(const Point& rPos, sal_uInt16 nButtons) void GL3DBarChart::render() { + if (BENCH_MARK_MODE) + return; osl::MutexGuard aGuard(maMutex); update(); } diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 25176277f068..fcc7908b24ad 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -46,6 +46,7 @@ class GL3DBarChart : public GL3DPlotterBase, public IRenderer friend class RenderThread; friend class RenderOneFrameThread; friend class RenderAnimationThread; + friend class RenderBenchMarkThread; public: GL3DBarChart( const css::uno::Reference& xChartType, @@ -118,6 +119,7 @@ private: osl::Mutex maMutex; rtl::Reference mpRenderThread; + bool mbRenderDie; }; } -- cgit