diff options
author | Markus Mohrhard <markus.mohrhard@collabora.co.uk> | 2014-08-28 21:57:44 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@collabora.co.uk> | 2014-08-29 17:40:36 +0200 |
commit | 89940633b43aa7ff136f73fcb3c78201d9cb4ef9 (patch) | |
tree | f8b39e8749b92263a84e43cd38e1981781e8582c /chart2 | |
parent | 01a4949dac2eb8c61a588d7dc40e2297b6077733 (diff) |
replace sleep with two condition variables
Change-Id: I7611b5be7d462646a19ebfd86b8d6612dccafc71
Diffstat (limited to 'chart2')
-rw-r--r-- | chart2/source/view/charttypes/GL3DBarChart.cxx | 43 | ||||
-rw-r--r-- | chart2/source/view/inc/GL3DBarChart.hxx | 10 |
2 files changed, 45 insertions, 8 deletions
diff --git a/chart2/source/view/charttypes/GL3DBarChart.cxx b/chart2/source/view/charttypes/GL3DBarChart.cxx index 11406bfb0402..d199b5033cb3 100644 --- a/chart2/source/view/charttypes/GL3DBarChart.cxx +++ b/chart2/source/view/charttypes/GL3DBarChart.cxx @@ -79,6 +79,27 @@ double findMaxValue(const boost::ptr_vector<VDataSeries>& rDataSeriesContainer) return nMax; } +class SharedResourceAccess +{ +private: + osl::Condition& mrCond1; + osl::Condition& mrCond2; + +public: + + SharedResourceAccess(osl::Condition& rCond1, osl::Condition& rCond2): + mrCond1(rCond1), + mrCond2(rCond2) + { + mrCond1.set(); + } + + ~SharedResourceAccess() + { + mrCond2.set(); + } +}; + } class RenderThread : public salhelper::Thread @@ -418,6 +439,7 @@ void RenderBenchMarkThread::execute() { { osl::MutexGuard aGuard(mpChart->maMutex); + mpChart->maCond2.reset(); if (mpChart->mbRenderDie) break; UpdateScreenText(); @@ -425,14 +447,11 @@ void RenderBenchMarkThread::execute() renderFrame(); mpChart->miFrameCount++; } - #ifdef WNT - Sleep(1); - #else - TimeValue nTV; - nTV.Seconds = 0; - nTV.Nanosec = 1000000; - osl_waitThread(&nTV); - #endif + if (mpChart->maCond1.check()) + { + mpChart->maCond1.reset(); + mpChart->maCond2.wait(); + } } } @@ -517,6 +536,7 @@ GL3DBarChart::~GL3DBarChart() { if (mbBenchMarkMode) { + SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); mbRenderDie = true; } @@ -531,6 +551,7 @@ GL3DBarChart::~GL3DBarChart() void GL3DBarChart::create3DShapes(const boost::ptr_vector<VDataSeries>& rDataSeriesContainer, ExplicitCategoriesProvider& rCatProvider) { + SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); mpRenderer->ReleaseShapes(); // Each series of data flows from left to right, and multiple series are @@ -803,6 +824,7 @@ void GL3DBarChart::moveToDefault() return; { + SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); maRenderEvent = EVENT_MOVE_TO_DEFAULT; } @@ -845,6 +867,7 @@ void GL3DBarChart::clickedAt(const Point& rPos, sal_uInt16 nButtons) return; { + SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); maClickPos = rPos; mnPreSelectBarId = mnSelectBarId; @@ -913,6 +936,7 @@ void GL3DBarChart::render() void GL3DBarChart::mouseDragMove(const Point& rStartPos, const Point& rEndPos, sal_uInt16 ) { long nDirection = rEndPos.X() - rStartPos.X(); + SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); if ((maRenderEvent == EVENT_NONE) || (maRenderEvent == EVENT_SHOW_SCROLL) || (maRenderEvent == EVENT_AUTO_FLY) || (maRenderEvent == EVENT_SHOW_SELECT)) @@ -989,6 +1013,7 @@ void GL3DBarChart::moveToCorner() void GL3DBarChart::scroll(long nDelta) { { + SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); if ((maRenderEvent != EVENT_NONE) && (maRenderEvent != EVENT_SHOW_SCROLL) && (maRenderEvent != EVENT_AUTO_FLY) && (maRenderEvent == EVENT_SHOW_SELECT)) @@ -1009,6 +1034,7 @@ void GL3DBarChart::scroll(long nDelta) void GL3DBarChart::contextDestroyed() { + SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); mbValidContext = false; } @@ -1055,6 +1081,7 @@ int GL3DBarChart::calcTimeInterval(TimeValue &startTime, TimeValue &endTime) void GL3DBarChart::updateScreenText() { + SharedResourceAccess(maCond1, maCond2); osl::MutexGuard aGuard(maMutex); maScreenTextShapes.clear(); mpRenderer->ReleaseScreenTextShapes(); diff --git a/chart2/source/view/inc/GL3DBarChart.hxx b/chart2/source/view/inc/GL3DBarChart.hxx index 007b8ad95829..11d7eeb7aff7 100644 --- a/chart2/source/view/inc/GL3DBarChart.hxx +++ b/chart2/source/view/inc/GL3DBarChart.hxx @@ -181,6 +181,16 @@ private: int mnColorRate; bool mbBenchMarkMode; sal_uInt32 maHistoryCounter; + + + // these form a pair: + // main thread sets condition 1 and waits until it can take the mutex + // render thread checks condition 1 before taking the mutex and waits in case it + // is set until condition 2 is set + // + // only necessary for the benchmark mode + osl::Condition maCond1; + osl::Condition maCond2; }; } |