Ignore:
Timestamp:
Aug 27, 2014, 1:08:53 PM (10 years ago)
Author:
ldelgass
Message:

Add some Makefile flags for sleep throttling settings

File:
1 edited

Legend:

Unmodified
Added
Removed
  • geovis/trunk/Renderer.cpp

    r4575 r4628  
    2020#include <sys/time.h>
    2121#endif
    22 
    23 //#define USE_OSGEARTH_TRUNK
    24 #define USE_CACHE
    2522
    2623#include <osgDB/FileUtils>
     
    8986    _bgColor[1] = 0;
    9087    _bgColor[2] = 0;
    91     _minFrameTime = 1.0/30.0;
     88    //setMaximumFrameRateInHertz(15.0);
     89    // 100MBit
     90    setMaximumBitrate(1.0e8);
    9291    _lastFrameTime = _minFrameTime;
     92    TRACE("Bandwidth target: %.2f MBit", (float)(getMaximumBitrate()/1.0e6));
     93    TRACE("Frame rate target: %.2f Hz", (float)getMaximumFrameRateInHertz());
    9394
    9495    char *base = getenv("MAP_BASE_URI");
     
    10261027}
    10271028
    1028 void Renderer::addImageLayer(const char *name,
     1029bool Renderer::addImageLayer(const char *name,
    10291030                             osgEarth::TileSourceOptions& opts,
    10301031                             bool makeShared,
     
    10331034    if (!_map.valid()) {
    10341035        ERROR("No map");
    1035         return;
     1036        return false;
    10361037    }
    10371038    TRACE("layer: %s", name);
     
    10461047        layerOpts.visible() = false;
    10471048    }
    1048     _map->addImageLayer(new osgEarth::ImageLayer(layerOpts));
     1049    osg::ref_ptr<osgEarth::ImageLayer> layer = new osgEarth::ImageLayer(layerOpts);
     1050    _map->addImageLayer(layer.get());
     1051    if (layer->getTileSource() == NULL || !layer->getTileSource()->isOK()) {
     1052        ERROR("Failed to add image layer: %s", name);
     1053        _map->removeImageLayer(layer.get());
     1054        return false;
     1055    }
    10491056    _needsRedraw = true;
     1057    return true;
    10501058}
    10511059
     
    13071315    TRACE("Setting window size to %dx%d", width, height);
    13081316
     1317    double origBitrate = getMaximumBitrate();
     1318
    13091319    _windowWidth = width;
    13101320    _windowHeight = height;
     1321
     1322    setMaximumBitrate(origBitrate);
     1323    TRACE("Bandwidth target: %.2f MBit", (float)(getMaximumBitrate()/1.0e6));
     1324    TRACE("Frame rate target: %.2f Hz", (float)getMaximumFrameRateInHertz());
     1325
    13111326    if (_viewer.valid()) {
    13121327#ifdef USE_OFFSCREEN_RENDERING
     
    16471662}
    16481663
     1664void Renderer::markFrameStart()
     1665{
     1666    _startFrameTime = osg::Timer::instance()->tick();
     1667}
     1668
     1669void Renderer::markFrameEnd()
     1670{
     1671    osg::Timer_t endFrameTick = osg::Timer::instance()->tick();
     1672    _lastFrameTime = osg::Timer::instance()->delta_s(_startFrameTime, endFrameTick);
     1673    TRACE("Frame time: %g sec", _lastFrameTime);
     1674#ifdef USE_THROTTLING_SLEEP
     1675    if (_lastFrameTime < _minFrameTime) {
     1676        TRACE("Sleeping for %g secs", _minFrameTime - _lastFrameTime);
     1677        OpenThreads::Thread::microSleep(static_cast<unsigned int>(1000000.0*(_minFrameTime - _lastFrameTime)));
     1678    }
     1679#endif
     1680}
     1681
    16491682/**
    16501683 * \brief Cause the rendering to render a new image if needed
     
    16571690    if (_viewer.valid() && checkNeedToDoFrame()) {
    16581691        TRACE("Enter needsRedraw=%d",  _needsRedraw ? 1 : 0);
     1692#ifndef SLEEP_AFTER_QUEUE_FRAME
    16591693        osg::Timer_t startFrameTick = osg::Timer::instance()->tick();
     1694#endif
    16601695        TRACE("Before frame()");
    16611696        _viewer->frame();
    16621697        TRACE("After frame()");
     1698#ifndef SLEEP_AFTER_QUEUE_FRAME
    16631699        osg::Timer_t endFrameTick = osg::Timer::instance()->tick();
    16641700        _lastFrameTime = osg::Timer::instance()->delta_s(startFrameTick, endFrameTick);
    16651701        TRACE("Frame time: %g sec", _lastFrameTime);
    1666 #if 0
    1667         if (frameTime < minFrameTime) {
    1668             TRACE("Sleeping for %g secs", minFrameTime-frameTime);
    1669             OpenThreads::Thread::microSleep(static_cast<unsigned int>(1000000.0*(minFrameTime-frameTime)));
    1670         }
     1702#ifdef USE_THROTTLING_SLEEP
     1703        if (_lastFrameTime < _minFrameTime) {
     1704            TRACE("Sleeping for %g secs", _minFrameTime - _lastFrameTime);
     1705            OpenThreads::Thread::microSleep(static_cast<unsigned int>(1000000.0*(_minFrameTime - _lastFrameTime)));
     1706        }
     1707#endif
    16711708#endif
    16721709#ifdef WANT_TRACE
Note: See TracChangeset for help on using the changeset viewer.