summaryrefslogtreecommitdiff
path: root/chart2
diff options
context:
space:
mode:
authorweigao <weigao@multicorewareinc.com>2014-07-19 20:12:37 +0800
committerMarkus Mohrhard <markus.mohrhard@collabora.co.uk>2014-07-23 22:23:45 +0200
commitcd6029f2373c67ab39313fd6314610becb5095c5 (patch)
treef1e005bbcb9c983c0c394f43d59ac8ece37afab1 /chart2
parentcc827ab81d285156fffb8920cba460703cad789d (diff)
add benchmark render thread
Change-Id: I0770db8e2cb5ecb1ef7d3706082196a8fd8f1ede
Diffstat (limited to 'chart2')
-rw-r--r--chart2/source/view/charttypes/GL3DBarChart.cxx79
-rw-r--r--chart2/source/view/inc/GL3DBarChart.hxx2
2 files changed, 80 insertions, 1 deletions
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 <ExplicitCategoriesProvider.hxx>
#include <DataSeriesHelper.hxx>
+#include <osl/time.h>
+#ifdef WNT
+#include <windows.h>
+#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<css::chart2::XChartType>& 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<VDataSeries>& rDataSer
mpCamera->setPosition(maCameraPosition);
mpCamera->setDirection(maCameraDirection);
}
+ if (BENCH_MARK_MODE && (!mpRenderThread.is()))
+ {
+ Size aSize = mrWindow.GetSizePixel();
+ mrWindow.getContext().setWinSize(aSize);
+ mpRenderThread = rtl::Reference<RenderThread>(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<RenderThread>(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<css::chart2::XChartType>& xChartType,
@@ -118,6 +119,7 @@ private:
osl::Mutex maMutex;
rtl::Reference<RenderThread> mpRenderThread;
+ bool mbRenderDie;
};
}