| /////////////////////////////////////////////////////////////////////////////// |
| // // |
| // Copyright (c) 2000-2019 Ericsson Telecom AB // |
| // // |
| // All rights reserved. This program and the accompanying materials // |
| // are made available under the terms of the Eclipse Public License v2.0 // |
| // which accompanies this distribution, and is available at // |
| // https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html // |
| /////////////////////////////////////////////////////////////////////////////// |
| |
| /////////////////////////////////////////////////////////// |
| // Module: EPTF_CLL_RBTScheduler_Definitions |
| // |
| // Purpose: |
| // This module supports definitions for scheduled event handling in a generic way |
| // |
| // Module Parameters: |
| // |
| // Module depends on: |
| // <EPTF_CLL_RBT_Definitions> |
| // <EPTF_CLL_Scheduler_Definitions> |
| // <EPTF_CLL_Logging_Definitions> |
| // |
| // Current Owner: |
| // Janos Svaner (EJNOSVN) |
| // |
| // Last Review Date: |
| // 2007-06-19 |
| // |
| // Detailed Comments: |
| // This module contains generic definitions for <EPTF_RBT> |
| // based event scheduling. |
| // |
| // It defines the type of the event queue as an EPTF Red-Black tree. |
| // And it also defines the <EPTF_Scheduler_CT> scheduler component |
| // which uses the RBT scheduler definitions. |
| // |
| /////////////////////////////////////////////////////////// |
| module EPTF_CLL_RBTScheduler_Definitions |
| { |
| |
| //========================================================================= |
| // Import Part |
| //========================================================================= |
| import from EPTF_CLL_RBT_Definitions all; |
| import from EPTF_CLL_Scheduler_Definitions all; |
| import from EPTF_CLL_Logging_Definitions all; |
| |
| //========================================================================= |
| // Module Parameters |
| //========================================================================= |
| |
| //========================================================================= |
| //Component Types |
| //========================================================================= |
| |
| /////////////////////////////////////////////////////////// |
| // Component: EPTF_Scheduler_CT |
| // |
| // Purpose: |
| // This component defines the EPTF Scheduler component. |
| // It is intended for extension. It has an <EPTF_EventQueue> plus suitable timers |
| // |
| // Elements: |
| // - v_Scheduler_initialized - *boolean* - true if scheduler init function was called. Prevents multiple execution of the init function |
| // - v_EPTF_eventQueue - <EPTF_EventQueue> - contains the event queue. You is initialized |
| // by <f_EPTF_SchedulerComp_InitScheduler> () |
| // - T_EPTF_nextEvent - *timer* - is used for measuring the differential delay |
| // up to the next event, if necessary to actually sleep |
| // - v_EPTF_nextEventIsActive - *boolean* - true if the T_EPTF_nextEvent is active. |
| // (workaround for the limitations of the timer.running operator of the TTCN-3 language) |
| // - v_EPTF_snapshotTime - *float* - is used for storing the "snapshot" of T_EPTF_componentClock |
| // that is, the "wall clock time" upon the component "awakes" either |
| // due to the T_EPTF_nextEvent.timeout, or due to an incoming msg. |
| // |
| // Detailed Comments: |
| // This component must be initialized with the <f_EPTF_SchedulerComp_InitScheduler> function. |
| // |
| /////////////////////////////////////////////////////////// |
| type component EPTF_Scheduler_CT extends EPTF_Logging_CT, EPTF_RBT_CT |
| { |
| private var boolean v_Scheduler_initialized := false; |
| // scheduler database. |
| private var EPTF_EventQueue v_EPTF_eventQueue ; |
| //timer to expire when next event shall be generated |
| private timer T_EPTF_nextEvent := tsp_EPTF_ELEMENTARY_TIMESTEP_PARAM; |
| private var boolean v_EPTF_nextEventIsActive := false; |
| //for storin the real time measured by t_componentClock when T_EPTF_nextEvent has been expired |
| private var float v_EPTF_snapshotTime := 0.0; |
| private var default v_EPTF_Scheduler_def := null; |
| |
| // logging |
| private var integer v_Scheduler_loggingMaskId := c_EPTF_Logging_invalidMaskId; |
| |
| //overload detection: |
| private var float v_Scheduler_loadMeasurementCumulativeDelay := 0.0; // sum of delays between measurement interval |
| private var float v_Scheduler_loadMeasurementInterval := 10.0; // measurement interval in seconds |
| private var integer v_Scheduler_loadMeasurementEventId := -1; // the event ID of the measurment event |
| private var float v_Scheduler_lastMeasuredLoad := 0.0; // the last load value measured (= cumulativeDelay/measurementInterval) |
| private var float v_Scheduler_lastMeasureTime := 0.0; // time of last measurement (from clock) |
| private var float v_Scheduler_maxLoadThreshold := 0.99; // if load reaches this value, events to be scheduled into the past will be scheduled into the future |
| }; |
| |
| //========================================================================= |
| // Data Types |
| //========================================================================= |
| |
| /////////////////////////////////////////////////////////// |
| // Type: EPTF_EventQueue |
| // |
| // Purpose: |
| // This datastructure is the base data type for the scheduler functions |
| // |
| // Elements: |
| // - schedulerRunsFor - *float* - contains the absolute time value for which |
| // the scheduler was last started. The invalid setting is "-1.0" |
| // |
| // - order - <EPTF_Float_RedBlackTree> - contains the ordering of events in the |
| // busy chain. |
| // |
| // - events- <EPTF_ScheduledActionList> - contains the events to be scheduled. |
| // |
| // Detailed Comments: |
| // Encloses the <EPTF_Float_RedBlackTree> and the corresponding <EPTF_ScheduledActionList>. |
| // This array of actions to be scheduled is used together with a |
| // <EPTF_Float_RedBlackTree>, which defines the ordering of the events efficiently |
| // |
| /////////////////////////////////////////////////////////// |
| type record EPTF_EventQueue { |
| float schedulerRunsFor, |
| EPTF_RBT_TreeId order, |
| EPTF_ScheduledActionList events |
| } |
| |
| //========================================================================= |
| // Constants |
| //========================================================================= |
| /////////////////////////////////////////////////////////// |
| // Constant: c_EPTF_emptyEventQueue |
| // |
| // Purpose: |
| // useful constant to init an EPTF_EventQueue at once |
| // |
| // References: |
| // <EPTF_EventQueue> := {order:= <c_EPTF_emptyFloatRBTree>, events := {}} |
| // |
| /////////////////////////////////////////////////////////// |
| const EPTF_EventQueue c_EPTF_emptyEventQueue := {-1.0, -1 ,{}} |
| |
| } // end of module |