New RefreshManager logic. A refresh trigger is introduced, which is

scheduled in the future to trigger a schedule of a refresh command. This
allows for more sophisticated refresh logics in the futurer
(postponing).
This commit is contained in:
Janik Schlemminger
2014-03-12 05:12:41 -07:00
parent 9d3c6ca715
commit 4dbc9b8a78
19 changed files with 282 additions and 164 deletions

View File

@@ -21,6 +21,7 @@ class MockInternalScheduler: public IInternalScheduler
{
public:
MOCK_METHOD1(scheduleCommand, void (const ScheduledCommand& command));
MOCK_METHOD2(scheduleTrigger, void (const Trigger command, sc_time time));
};
TEST(RefreshManager, RefreshIsScheduledAfterStartup)
@@ -28,12 +29,14 @@ TEST(RefreshManager, RefreshIsScheduledAfterStartup)
Configuration config;
MockInternalScheduler internalScheduler;
tlm::tlm_generic_payload trans;
auto init = ScheduledCommand(trans, Command::Refresh, config.Timings.tREF);
EXPECT_CALL(internalScheduler, scheduleTrigger(Trigger::RefreshTrigger, _)).Times(2);
EXPECT_CALL(internalScheduler, scheduleCommand(_));
EXPECT_CALL(internalScheduler, scheduleCommand(init));
//first trigger is scheduled
RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler);
RefreshManager manager(config, internalScheduler);
//first refresh is scheduled, second trigger is scheduled
manager.scheduleRefresh(config.Timings.refreshTimings.at(0).tREFI);//call back from wrapper
}
TEST(RefreshManager, FinishedRefreshTriggersNewRefresh)
@@ -43,11 +46,14 @@ TEST(RefreshManager, FinishedRefreshTriggersNewRefresh)
EXPECT_CALL(internalScheduler, scheduleCommand(_)).Times(2);
//schedule first refresh in constructor
RefreshManager manager(config, internalScheduler);
//schedule second refresh in callback (end_refresh)
tlm::tlm_generic_payload trans;
manager.cb_refreshFinished(trans, config.Timings.tREF + config.Timings.tREFA);
//first trigger is scheduled
RefreshManager manager(config.Timings.refreshTimings.at(0), internalScheduler);
//first refresh is scheduled at tREFI (wrapper triggers), second trigger is scheduled
manager.scheduleRefresh(config.Timings.refreshTimings.at(0).tREFI);//call back from wrapper
//second trigger should schedule second refresh (wrapper triggers)
manager.scheduleRefresh(config.Timings.refreshTimings.at(0).tREFI * 2);
}
} /* namespace controller */