Kaydet (Commit) 13c619c5 authored tarafından László Németh's avatar László Németh

vcldemo profiling: support Windows time resolution

Change-Id: I0a8f6b256f170b351a5d46cc899d6360123b2719
üst 85b5e24b
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#define FIXME_SELF_INTERSECTING_WORKING 0 #define FIXME_SELF_INTERSECTING_WORKING 0
#define FIXME_BOUNCE_BUTTON 0 #define FIXME_BOUNCE_BUTTON 0
#define THUMB_REPEAT_FACTOR 10
using namespace com::sun::star; using namespace com::sun::star;
...@@ -83,11 +84,15 @@ class DemoRenderer ...@@ -83,11 +84,15 @@ class DemoRenderer
virtual sal_uInt16 getAccelerator() = 0; virtual sal_uInt16 getAccelerator() = 0;
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &rCtx) = 0; const RenderContext &rCtx) = 0;
#define RENDER_DETAILS(name,key) \ // repeating count for profiling (to exceed the poor time resolution on Windows)
virtual sal_uInt16 getTestRepeatCount() = 0;
#define RENDER_DETAILS(name,key,repeat) \
virtual OUString getName() SAL_OVERRIDE \ virtual OUString getName() SAL_OVERRIDE \
{ return OUString(SAL_STRINGIFY(name)); } \ { return OUString(SAL_STRINGIFY(name)); } \
virtual sal_uInt16 getAccelerator() SAL_OVERRIDE \ virtual sal_uInt16 getAccelerator() SAL_OVERRIDE \
{ return key; } { return key; } \
virtual sal_uInt16 getTestRepeatCount() SAL_OVERRIDE \
{ return repeat; }
double sumTime; double sumTime;
int countTime; int countTime;
...@@ -202,7 +207,7 @@ public: ...@@ -202,7 +207,7 @@ public:
struct DrawLines : public RegionRenderer struct DrawLines : public RegionRenderer
{ {
RENDER_DETAILS(lines,KEY_L) RENDER_DETAILS(lines,KEY_L,100)
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &rCtx) SAL_OVERRIDE const RenderContext &rCtx) SAL_OVERRIDE
{ {
...@@ -289,7 +294,7 @@ public: ...@@ -289,7 +294,7 @@ public:
struct DrawText : public RegionRenderer struct DrawText : public RegionRenderer
{ {
RENDER_DETAILS(text,KEY_T) RENDER_DETAILS(text,KEY_T,100)
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &) SAL_OVERRIDE const RenderContext &) SAL_OVERRIDE
{ {
...@@ -302,7 +307,7 @@ public: ...@@ -302,7 +307,7 @@ public:
struct DrawCheckered : public RegionRenderer struct DrawCheckered : public RegionRenderer
{ {
RENDER_DETAILS(checks,KEY_C) RENDER_DETAILS(checks,KEY_C,20)
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &rCtx) SAL_OVERRIDE const RenderContext &rCtx) SAL_OVERRIDE
{ {
...@@ -363,7 +368,7 @@ public: ...@@ -363,7 +368,7 @@ public:
struct DrawPoly : public RegionRenderer struct DrawPoly : public RegionRenderer
{ {
RENDER_DETAILS(poly,KEY_P) RENDER_DETAILS(poly,KEY_P,20)
DrawCheckered maCheckered; DrawCheckered maCheckered;
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &rCtx) SAL_OVERRIDE const RenderContext &rCtx) SAL_OVERRIDE
...@@ -387,7 +392,7 @@ public: ...@@ -387,7 +392,7 @@ public:
struct DrawEllipse : public RegionRenderer struct DrawEllipse : public RegionRenderer
{ {
RENDER_DETAILS(ellipse,KEY_E) RENDER_DETAILS(ellipse,KEY_E,5000)
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &) SAL_OVERRIDE const RenderContext &) SAL_OVERRIDE
{ {
...@@ -399,7 +404,7 @@ public: ...@@ -399,7 +404,7 @@ public:
struct DrawGradient : public RegionRenderer struct DrawGradient : public RegionRenderer
{ {
RENDER_DETAILS(gradient,KEY_G) RENDER_DETAILS(gradient,KEY_G,50)
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &rCtx) SAL_OVERRIDE const RenderContext &rCtx) SAL_OVERRIDE
{ {
...@@ -469,7 +474,7 @@ public: ...@@ -469,7 +474,7 @@ public:
struct DrawBitmap : public RegionRenderer struct DrawBitmap : public RegionRenderer
{ {
RENDER_DETAILS(bitmap,KEY_B) RENDER_DETAILS(bitmap,KEY_B,10)
// Simulate Page Borders rendering - which ultimately should // Simulate Page Borders rendering - which ultimately should
// be done with a shader / gradient // be done with a shader / gradient
...@@ -529,7 +534,7 @@ public: ...@@ -529,7 +534,7 @@ public:
struct DrawBitmapEx : public RegionRenderer struct DrawBitmapEx : public RegionRenderer
{ {
RENDER_DETAILS(bitmapex,KEY_X) RENDER_DETAILS(bitmapex,KEY_X,2)
DrawCheckered maCheckered; DrawCheckered maCheckered;
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &rCtx) SAL_OVERRIDE const RenderContext &rCtx) SAL_OVERRIDE
...@@ -547,7 +552,7 @@ public: ...@@ -547,7 +552,7 @@ public:
struct DrawPolyPolygons : public RegionRenderer struct DrawPolyPolygons : public RegionRenderer
{ {
RENDER_DETAILS(polypoly,KEY_N) RENDER_DETAILS(polypoly,KEY_N,100)
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &) SAL_OVERRIDE const RenderContext &) SAL_OVERRIDE
{ {
...@@ -598,7 +603,7 @@ public: ...@@ -598,7 +603,7 @@ public:
struct DrawToVirtualDevice : public RegionRenderer struct DrawToVirtualDevice : public RegionRenderer
{ {
RENDER_DETAILS(vdev,KEY_V) RENDER_DETAILS(vdev,KEY_V,1)
enum RenderType { enum RenderType {
RENDER_AS_BITMAP, RENDER_AS_BITMAP,
RENDER_AS_OUTDEV, RENDER_AS_OUTDEV,
...@@ -665,7 +670,7 @@ public: ...@@ -665,7 +670,7 @@ public:
struct DrawIcons : public RegionRenderer struct DrawIcons : public RegionRenderer
{ {
RENDER_DETAILS(icons,KEY_I) RENDER_DETAILS(icons,KEY_I,1)
std::vector<OUString> maIconNames; std::vector<OUString> maIconNames;
std::vector<BitmapEx> maIcons; std::vector<BitmapEx> maIcons;
...@@ -899,7 +904,7 @@ public: ...@@ -899,7 +904,7 @@ public:
struct FetchDrawBitmap : public RegionRenderer struct FetchDrawBitmap : public RegionRenderer
{ {
RENDER_DETAILS(fetchdraw,KEY_F) RENDER_DETAILS(fetchdraw,KEY_F,50)
virtual void RenderRegion(OutputDevice &rDev, Rectangle r, virtual void RenderRegion(OutputDevice &rDev, Rectangle r,
const RenderContext &) SAL_OVERRIDE const RenderContext &) SAL_OVERRIDE
{ {
...@@ -924,9 +929,16 @@ public: ...@@ -924,9 +929,16 @@ public:
mnSelectedRenderer >= 0) mnSelectedRenderer >= 0)
{ {
aCtx.meStyle = RENDER_EXPANDED; aCtx.meStyle = RENDER_EXPANDED;
mnStartTime = getTimeNow(); RegionRenderer * r = maRenderers[mnSelectedRenderer];
maRenderers[mnSelectedRenderer]->RenderRegion(rDev, aWholeWin, aCtx); // profiling?
addTime(mnSelectedRenderer, getTimeNow() - mnStartTime); if (getIterCount() > 0)
{
mnStartTime = getTimeNow();
for (int i = 0; i < r->getTestRepeatCount(); i++)
r->RenderRegion(rDev, aWholeWin, aCtx);
addTime(mnSelectedRenderer, getTimeNow() - mnStartTime);
} else
r->RenderRegion(rDev, aWholeWin, aCtx);
} }
else else
{ {
...@@ -935,9 +947,21 @@ public: ...@@ -935,9 +947,21 @@ public:
DemoRenderer::clearRects(rDev, aRegions); DemoRenderer::clearRects(rDev, aRegions);
for (size_t i = 0; i < maRenderers.size(); i++) for (size_t i = 0; i < maRenderers.size(); i++)
{ {
if (!bVDev) mnStartTime = getTimeNow(); RegionRenderer * r = maRenderers[i];
maRenderers[i]->RenderRegion(rDev, aRegions[i], aCtx); // profiling?
if (!bVDev) addTime(i, getTimeNow() - mnStartTime); if (getIterCount() > 0)
{
if (!bVDev)
{
mnStartTime = getTimeNow();
for (int j = 0; j < r->getTestRepeatCount() * THUMB_REPEAT_FACTOR; j++)
r->RenderRegion(rDev, aRegions[i], aCtx);
addTime(i, (getTimeNow() - mnStartTime) / THUMB_REPEAT_FACTOR);
} else
for (int j = 0; j < r->getTestRepeatCount(); j++)
r->RenderRegion(rDev, aRegions[i], aCtx);
} else
r->RenderRegion(rDev, aRegions[i], aCtx);
} }
} }
} }
...@@ -1121,7 +1145,7 @@ sal_Int32 DemoRenderer::getIterCount() ...@@ -1121,7 +1145,7 @@ sal_Int32 DemoRenderer::getIterCount()
void DemoRenderer::addTime(int i, double t) void DemoRenderer::addTime(int i, double t)
{ {
maRenderers[i]->sumTime += t; maRenderers[i]->sumTime += t / maRenderers[i]->getTestRepeatCount();
maRenderers[i]->countTime++; maRenderers[i]->countTime++;
} }
...@@ -1150,12 +1174,14 @@ int DemoRenderer::selectNextRenderer() ...@@ -1150,12 +1174,14 @@ int DemoRenderer::selectNextRenderer()
class DemoWin : public WorkWindow class DemoWin : public WorkWindow
{ {
DemoRenderer &mrRenderer; DemoRenderer &mrRenderer;
bool underTesting;
public: public:
DemoWin(DemoRenderer &rRenderer) : DemoWin(DemoRenderer &rRenderer) :
WorkWindow(NULL, WB_APP | WB_STDWORK), WorkWindow(NULL, WB_APP | WB_STDWORK),
mrRenderer(rRenderer) mrRenderer(rRenderer)
{ {
mrRenderer.addInvalidate(this); mrRenderer.addInvalidate(this);
underTesting = false;
} }
virtual ~DemoWin() virtual ~DemoWin()
{ {
...@@ -1188,6 +1214,8 @@ public: ...@@ -1188,6 +1214,8 @@ public:
virtual void TestAndQuit() virtual void TestAndQuit()
{ {
if (underTesting) return;
underTesting=true;
for (sal_Int32 i = 0; i < mrRenderer.getIterCount(); i++) for (sal_Int32 i = 0; i < mrRenderer.getIterCount(); i++)
while (mrRenderer.selectNextRenderer() > -1) while (mrRenderer.selectNextRenderer() > -1)
mrRenderer.drawToDevice(*this, GetSizePixel(), false); mrRenderer.drawToDevice(*this, GetSizePixel(), false);
......
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