In Katana, Adjust the moveUp cases in SegmentFsm/Manipulator.

* Change: In SegmentFsm::_slackenLocal(), in the Minimize state, when
    the segment is fully blocked *and* has *lot* of candidate tracks,
    that means that it is up against a *massive* blockage (i.e. a macro
    block). In that case, try to move up (to go *over* it).
      Previous behavior was to go straight to Inimplemented state.
* Change: In SegmentFsm::_slackenGlobal(), manage fully blocked
    global segments. But finally, this configuration didn't arise.
* Change: In Manipulator::moveUp(), restore the management of the
    AllowLocalMoveUp flag, to be able to move up local segments
    (needed by SegmentFsm::_slackenLocal()).
This commit is contained in:
Jean-Paul Chaput 2021-04-24 12:56:16 +02:00
parent 79f5b3db08
commit 496cc00304
3 changed files with 11 additions and 7 deletions

View File

@ -1176,7 +1176,7 @@ namespace Katana {
cdebug_log(159,0) << "Manipulator::moveUp() " << _segment << endl;
Flags kflags = Flags::WithNeighbors;
//kflags |= (flags & AllowLocalMoveUp ) ? Flags::AutoSegment::AllowLocal : 0;
kflags |= (flags & AllowLocalMoveUp ) ? Flags::AllowLocal : Flags::NoFlags;
kflags |= (flags & AllowTerminalMoveUp) ? Flags::AllowTerminal : Flags::NoFlags;
kflags |= (flags & IgnoreContacts ) ? Flags::IgnoreContacts : Flags::NoFlags;

View File

@ -1286,6 +1286,13 @@ namespace Katana {
if (nextState == DataNegociate::Minimize) {
if (isFullBlocked() and not segment->isTerminal()) {
cdebug_log(159,0) << "Is Fully blocked." << endl;
if (_costs.size() > 7) {
success = manipulator.moveUp( Manipulator::AllowLocalMoveUp );
if (success) {
cdebug_log(159,0) << "Was able to move up." << endl;
break;
}
}
nextState = DataNegociate::Unimplemented;
break;
}
@ -1388,7 +1395,8 @@ namespace Katana {
<< ((manipulator.getEvent())
? manipulator.getEvent()->getConstraints() : "(no event yet)") << endl;
if ( manipulator.getEvent()
and manipulator.getEvent()->getConstraints().isPonctual()
and ( manipulator.getEvent()->getConstraints().isPonctual()
or (isFullBlocked() and (_costs.size() > 7)))
and segment->canMoveUp(1.0,Flags::CheckLowUpDensity|Flags::AllowTerminal) ) {
moveUpFlags |= Manipulator::AllowTerminalMoveUp;
} else {

View File

@ -14,9 +14,7 @@
// +-----------------------------------------------------------------+
#ifndef KATANA_SEGMENT_FSM_H
#define KATANA_SEGMENT_FSM_H
#pragma once
#include "katana/TrackCost.h"
namespace Katana {
@ -240,5 +238,3 @@ namespace Katana {
}
} // Katana namespace.
#endif // KATANA_SEGMENT_FSM_H