示例#1
0
bool Window::_cmdFrameFinish( co::Command& command )
{
    const WindowFrameFinishPacket* packet =
        command.get<WindowFrameFinishPacket>();
    LBVERB << "handle window frame sync " << packet << std::endl;

    makeCurrent();
    frameFinish( packet->frameID, packet->frameNumber );
    return true;
}
示例#2
0
bool Window::_cmdFrameFinish( co::ICommand& cmd )
{
    co::ObjectICommand command( cmd );

    LBVERB << "handle window frame sync " << command << std::endl;

    const uint128_t& frameID = command.read< uint128_t >();
    const uint32_t frameNumber = command.read< uint32_t >();

    makeCurrent();
    frameFinish( frameID, frameNumber );
    return true;
}
示例#3
0
bool Pipe::_cmdFrameFinish( co::ICommand& cmd )
{
    LB_TS_THREAD( _pipeThread );

    co::ObjectICommand command( cmd );
    const uint128_t frameID = command.get< uint128_t >();
    const uint32_t frameNumber = command.get< uint32_t >();

    LBLOG( LOG_TASKS ) << "---- TASK finish frame --- " << command << " frame "
                       << frameNumber << " id " << frameID << std::endl;

    LBASSERTINFO( _impl->currentFrame >= frameNumber,
                  "current " <<_impl->currentFrame << " finish " <<frameNumber);

    frameFinish( frameID, frameNumber );

    LBASSERTINFO( _impl->finishedFrame >= frameNumber,
                  "Pipe::frameFinish() did not release frame " << frameNumber );

    if( _impl->unlockedFrame < frameNumber )
    {
        LBWARN << "Finished frame was not locally unlocked, enforcing unlock"
               << std::endl << "    unlocked " << _impl->unlockedFrame.get()
               << " done " << frameNumber << std::endl;
        releaseFrameLocal( frameNumber );
    }

    if( _impl->finishedFrame < frameNumber )
    {
        LBWARN << "Finished frame was not released, enforcing unlock"
               << std::endl;
        releaseFrame( frameNumber );
    }

    _releaseViews();

    const uint128_t version = commit();
    if( version != co::VERSION_NONE )
        send( command.getNode(), fabric::CMD_OBJECT_SYNC );
    return true;
}
示例#4
0
void Node::_frameFinish( const uint128_t& frameID, 
                         const uint32_t frameNumber )
{
    frameFinish( frameID, frameNumber );
    LBLOG( LOG_TASKS ) << "---- Finished Frame --- " << frameNumber
                       << std::endl;

    if( _unlockedFrame < frameNumber )
    {
        LBWARN << "Finished frame was not locally unlocked, enforcing unlock" 
               << std::endl;
        releaseFrameLocal( frameNumber );
    }

    if( _finishedFrame < frameNumber )
    {
        LBWARN << "Finished frame was not released, enforcing unlock"
               << std::endl;
        releaseFrame( frameNumber );
    }
}