Changeset 4025


Ignore:
Timestamp:
Oct 30, 2013, 11:56:27 AM (11 years ago)
Author:
ldelgass
Message:

First pass at polling events

Location:
trunk/packages/vizservers/geovis
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/geovis/RenderServer.cpp

    r4014 r4025  
    484484    // Start main server loop
    485485    for (;;) {
    486         if (processCommands(interp, NULL, g_inBufPtr, g_fdOut) < 0)
     486        long timeout = g_renderer->getTimeout();
     487        if (processCommands(interp, NULL, g_inBufPtr, g_fdOut, timeout) < 0)
    487488            break;
    488489
  • trunk/packages/vizservers/geovis/Renderer.cpp

    r4015 r4025  
    4343    _bgColor[1] = 0;
    4444    _bgColor[2] = 0;
     45    _minFrameTime = 1.0/30.0;
     46    _lastFrameTime = _minFrameTime;
    4547    _viewer = new osgViewer::Viewer();
    4648    _viewer->setThreadingModel(osgViewer::ViewerBase::SingleThreaded);
     
    323325}
    324326
     327long Renderer::getTimeout()
     328{
     329    if (_lastFrameTime < _minFrameTime) {
     330        (long)1000000.0*(_minFrameTime - _lastFrameTime);
     331    } else {
     332        return 0L;
     333    }
     334}
     335
     336bool isPagerIdle()
     337{
     338    return (!_viewer->getDatabasePager()->requiresUpdateSceneGraph() &&
     339            !_viewer->getDatabasePager()->getRequestsInProgress());
     340}
     341
    325342/**
    326343 * \brief Cause the rendering to render a new image if needed
     
    333350    TRACE("Enter needsRedraw=%d",  _needsRedraw ? 1 : 0);
    334351
    335     if (_needsRedraw) {
    336         double _runMaxFrameRate = 60.0;
    337         double minFrameTime = _runMaxFrameRate>0.0 ? 1.0/_runMaxFrameRate : 0.0;
     352    if (_needsRedraw || !isPagerIdle()) {
    338353        osg::Timer_t startFrameTick = osg::Timer::instance()->tick();
    339354        TRACE("Before frame()");
     
    341356        TRACE("After frame()");
    342357        osg::Timer_t endFrameTick = osg::Timer::instance()->tick();
    343         double frameTime = osg::Timer::instance()->delta_s(startFrameTick, endFrameTick);
    344         TRACE("Frame time: %g sec", frameTime);
     358        _lastFrameTime = osg::Timer::instance()->delta_s(startFrameTick, endFrameTick);
     359        TRACE("Frame time: %g sec", _lastFrameTime);
     360#if 0
    345361        if (frameTime < minFrameTime) {
    346362            TRACE("Sleeping for %g secs", minFrameTime-frameTime);
    347363            OpenThreads::Thread::microSleep(static_cast<unsigned int>(1000000.0*(minFrameTime-frameTime)));
    348364        }
     365#endif
    349366        if (_viewer->getViewerStats() != NULL) {
    350367            _viewer->getViewerStats()->report(std::cerr, _viewer->getViewerStats()->getLatestFrameNumber());
  • trunk/packages/vizservers/geovis/Renderer.h

    r4014 r4025  
    212212    }
    213213
     214    long getTimeout();
     215
     216    bool isPagerIdle();
     217
    214218private:
    215219    void initCamera();
     
    218222    int _windowWidth, _windowHeight;
    219223    float _bgColor[3];
     224
     225    double _minFrameTime;
     226    double _lastFrameTime;
    220227
    221228    osg::ref_ptr<osg::Node> _sceneRoot;
  • trunk/packages/vizservers/geovis/RendererCmd.cpp

    r4014 r4025  
    543543                        ClientData clientData,
    544544                        ReadBuffer *inBufPtr,
    545                         int fdOut)
     545                        int fdOut,
     546                        long timeout)
    546547{
    547548    int ret = 1;
     
    558559                                         * that we don't spin when no data is
    559560                                         * available. */
     561    if (timeout >= 0L) {
     562        tv.tv_sec = 0L;
     563        tv.tv_usec = timeout;
     564        tvPtr = &tv;
     565    }
    560566    while (inBufPtr->isLineAvailable() ||
    561567           (select(1, &readFds, NULL, NULL, tvPtr) > 0)) {
  • trunk/packages/vizservers/geovis/RendererCmd.h

    r3998 r4025  
    2828                           ClientData clientData,
    2929                           ReadBuffer *inBufPtr,
    30                            int fdOut);
     30                           int fdOut,
     31                           long timeout = -1);
    3132
    3233extern int handleError(Tcl_Interp *interp,
Note: See TracChangeset for help on using the changeset viewer.