[Libreoffice-commits] core.git: Branch 'libreoffice-4-4' - vcl/workben

László Németh nemeth at collabora.com
Wed Nov 26 11:07:39 PST 2014


 vcl/workben/vcldemo.cxx |   70 +++++++++++++++++++++++++++++++++---------------
 1 file changed, 49 insertions(+), 21 deletions(-)

New commits:
commit 4d25f804c73e0f8637ddc6e004774e612e53a27f
Author: László Németh <nemeth at collabora.com>
Date:   Wed Nov 26 19:51:30 2014 +0100

    vcldemo profiling: support Windows time resolution
    
    Change-Id: I0a8f6b256f170b351a5d46cc899d6360123b2719

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


More information about the Libreoffice-commits mailing list