From e5cdb86ac36435ea5a646b4c169794e074cd80e9 Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Fri, 5 May 2023 03:46:42 +0200 Subject: [PATCH] Segmentation: integrate SplitSplice and build mock-segmentation ...now able to build a mock segmentation which issues dummy jobs, and is wired such as to verify the right job is invoked for each segment. And this allows to build and verify the Dispatcher, without being able to invoke actual render jobs yet. --- src/steam/fixture/segment.hpp | 10 ++++- src/steam/fixture/segmentation.cpp | 16 ++++--- tests/core/steam/engine/mock-dispatcher.hpp | 4 +- tests/core/steam/engine/mock-support-test.cpp | 42 +++++++++++++++++-- tests/core/vault/engine/dummy-job.cpp | 6 +-- wiki/thinkPad.ichthyo.mm | 39 ++++++++++------- 6 files changed, 85 insertions(+), 32 deletions(-) diff --git a/src/steam/fixture/segment.hpp b/src/steam/fixture/segment.hpp index ac58c00d5..09d9fb70b 100644 --- a/src/steam/fixture/segment.hpp +++ b/src/steam/fixture/segment.hpp @@ -75,9 +75,15 @@ namespace fixture { // TODO: ownership?? ///////////////////////////////////////////////////////////////////////////////////////////////////////TICKET #725 : placeholder code public: - Segment (TimeSpan covered =TimeSpan::ALL) + Segment (TimeSpan covered =TimeSpan::ALL + ,const engine::JobTicket* ticket =nullptr) : span_{covered} - , jobTicket_{&engine::JobTicket::NOP} + , jobTicket_{ticket? ticket : &engine::JobTicket::NOP} + { } + + Segment (Segment const& original, TimeSpan changed) + : span_{changed} + , jobTicket_{original.jobTicket_} { } // default copy acceptable diff --git a/src/steam/fixture/segmentation.cpp b/src/steam/fixture/segmentation.cpp index 6a853d558..472073daf 100644 --- a/src/steam/fixture/segmentation.cpp +++ b/src/steam/fixture/segmentation.cpp @@ -33,6 +33,9 @@ #include "lib/time/timevalue.hpp" #include "lib/split-splice.hpp" +using lib::time::Time; +using lib::time::TimeSpan; + namespace steam { namespace fixture { @@ -73,14 +76,15 @@ namespace fixture { Segment const& Segmentation::splitSplice (OptTime start, OptTime after, const engine::JobTicket* jobTicket) { + ASSERT (!start or !after or start != after); using Iter = typename list::iterator; - auto getStart = [](Iter elm) -> Time { return elm->start(); }; - auto getAfter = [](Iter elm) -> Time { return elm->after(); }; - auto createSeg= [](Iter pos, Time start, Time after) -> Iter { UNIMPLEMENTED ("create new Segment"); }; - auto emptySeg = [](Iter pos, Time start, Time after) -> Iter { UNIMPLEMENTED ("create empty Segment");}; - auto cloneSeg = [](Iter pos, Time start, Time after, Iter src) -> Iter { UNIMPLEMENTED ("clone Segment and modify time"); }; - auto discard = [](Iter pos, Iter after) -> Iter { UNIMPLEMENTED ("discard Segments"); }; + auto getStart = [](Iter elm) -> Time { return elm->start(); }; + auto getAfter = [](Iter elm) -> Time { return elm->after(); }; + auto createSeg= [&](Iter pos, Time start, Time after) -> Iter { return segments_.emplace (pos, TimeSpan{start, after}, jobTicket); }; + auto emptySeg = [&](Iter pos, Time start, Time after) -> Iter { return segments_.emplace (pos, TimeSpan{start, after}); }; + auto cloneSeg = [&](Iter pos, Time start, Time after, Iter src) -> Iter { return segments_.emplace (pos, *src, TimeSpan{start, after}); }; + auto discard = [&](Iter pos, Iter after) -> Iter { return segments_.erase (pos,after); }; lib::splitsplice::Algo splicer{ getStart diff --git a/tests/core/steam/engine/mock-dispatcher.hpp b/tests/core/steam/engine/mock-dispatcher.hpp index 411866d4a..bdb68cf5d 100644 --- a/tests/core/steam/engine/mock-dispatcher.hpp +++ b/tests/core/steam/engine/mock-dispatcher.hpp @@ -208,8 +208,8 @@ namespace test { for (auto& spec : specs) { JobTicket* newTicket = nullptr; - auto seed = spec.retrieveAttribute ("mark"); - tickets_.emplace_back (seed? *seed : HashVal(rand() % 1000)); + auto seed = spec.retrieveAttribute ("mark"); + tickets_.emplace_back (seed? HashVal(*seed) : HashVal(rand() % 1000)); newTicket = & tickets_.back(); auto start = spec.retrieveAttribute