VirtualBox

Ignore:
Timestamp:
Sep 1, 2010 1:01:45 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
65458
Message:

3D: fps logging, wddm/3d/aero: simple perf test app

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostServices/SharedOpenGL/crserverlib/server_clear.c

    r27889 r32175  
    1111#include "server_dispatch.h"
    1212#include "server.h"
     13
     14#ifdef VBOXCR_LOGFPS
     15#include <iprt/timer.h>
     16#include <iprt/ctype.h>
     17typedef struct VBOXCRFPS
     18{
     19    uint64_t mPeriodSum;
     20    uint64_t *mpaPeriods;
     21    uint64_t mPrevTime;
     22    uint64_t mcFrames;
     23    uint32_t mcPeriods;
     24    uint32_t miPeriod;
     25} VBOXCRFPS, *PVBOXCRFPS;
     26
     27void vboxCrFpsInit(PVBOXCRFPS pFps, uint32_t cPeriods)
     28{
     29    memset(pFps, 0, sizeof (*pFps));
     30    pFps->mcPeriods = cPeriods;
     31    pFps->mpaPeriods = malloc(sizeof (pFps->mpaPeriods[0]) * cPeriods);
     32    memset(pFps->mpaPeriods, 0, cPeriods * sizeof(pFps->mpaPeriods[0]));
     33}
     34
     35void vboxCrFpsTerm(PVBOXCRFPS pFps)
     36{
     37    free(pFps->mpaPeriods);
     38}
     39
     40void vboxCrFpsReportFrame(PVBOXCRFPS pFps)
     41{
     42    uint64_t cur = RTTimeNanoTS();
     43    if(pFps->mPrevTime)
     44    {
     45        uint64_t curPeriod = cur - pFps->mPrevTime;
     46        pFps->mPeriodSum += curPeriod - pFps->mpaPeriods[pFps->miPeriod];
     47        pFps->mpaPeriods[pFps->miPeriod] = curPeriod;
     48        ++pFps->miPeriod;
     49        pFps->miPeriod %= pFps->mcPeriods;
     50    }
     51    pFps->mPrevTime = cur;
     52    ++pFps->mcFrames;
     53}
     54
     55uint64_t vboxCrFpsGetEveragePeriod(PVBOXCRFPS pFps)
     56{
     57    return pFps->mPeriodSum / pFps->mcPeriods;
     58}
     59
     60double vboxCrFpsGetFps(PVBOXCRFPS pFps)
     61{
     62    return ((double)1000000000.0) / vboxCrFpsGetEveragePeriod(pFps);
     63}
     64
     65uint64_t vboxCrFpsGetNumFrames(PVBOXCRFPS pFps)
     66{
     67    return pFps->mcFrames;
     68}
     69
     70#endif
    1371
    1472
     
    48106{
    49107  CRMuralInfo *mural;
    50 
     108#ifdef VBOXCR_LOGFPS
     109  static VBOXCRFPS Fps;
     110  static bool bFpsInited = false;
     111
     112  if (!bFpsInited)
     113  {
     114      vboxCrFpsInit(&Fps, 64 /* cPeriods */);
     115      bFpsInited = true;
     116  }
     117  vboxCrFpsReportFrame(&Fps);
     118  if(!(vboxCrFpsGetNumFrames(&Fps) % 31))
     119  {
     120      double fps = vboxCrFpsGetFps(&Fps);
     121      crDebug("fps: %f\n", fps);
     122  }
     123#endif
    51124        mural = (CRMuralInfo *) crHashtableSearch(cr_server.muralTable, window);
    52125        if (!mural) {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette