MCPcopy Create free account
hub / github.com/NatronGitHub/Natron / threadLoopOnce

Method threadLoopOnce

Engine/TrackerContext.cpp:1834–2008  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1832};
1833
1834NATRON_NAMESPACE_ANONYMOUS_EXIT
1835
1836GenericSchedulerThread::ThreadStateEnum
1837TrackScheduler::threadLoopOnce(const GenericThreadStartArgsPtr& inArgs)
1838{
1839 TrackArgsPtr args = std::dynamic_pointer_cast<TrackArgs>(inArgs);
1840
1841 assert(args);
1842
1843 ThreadStateEnum state = eThreadStateActive;
1844 TimeLinePtr timeline = args->getTimeLine();
1845 ViewerInstance* viewer = args->getViewer();
1846 int end = args->getEnd();
1847 int start = args->getStart();
1848 int cur = start;
1849 int frameStep = args->getStep();
1850 int framesCount = 0;
1851 if (frameStep != 0) {
1852 framesCount = frameStep > 0 ? (end - start) / frameStep : (start - end) / std::abs(frameStep);
1853 }
1854
1855
1856 const std::vector<TrackMarkerAndOptionsPtr>& tracks = args->getTracks();
1857 const int numTracks = (int)tracks.size();
1858 std::vector<std::size_t> trackIndexes( tracks.size() );
1859 for (std::size_t i = 0; i < tracks.size(); ++i) {
1860 trackIndexes[i] = i;
1861 tracks[i]->natronMarker->notifyTrackingStarted();
1862 // unslave the enabled knob, since it is slaved to the gui but we may modify it
1863 KnobBoolPtr enabledKnob = tracks[i]->natronMarker->getEnabledKnob();
1864 enabledKnob->unSlave(0, false);
1865 }
1866
1867 // Beyond TRACKER_MAX_TRACKS_FOR_PARTIAL_VIEWER_UPDATE it becomes more expensive to render all partial rectangles
1868 // than just render the whole viewer RoI
1869 const bool doPartialUpdates = numTracks < TRACKER_MAX_TRACKS_FOR_PARTIAL_VIEWER_UPDATE;
1870 int lastValidFrame = frameStep > 0 ? start - 1 : start + 1;
1871 bool reportProgress = numTracks > 1 || framesCount > 1;
1872 EffectInstancePtr effect = _imp->getNode()->getEffectInstance();
1873 timeval lastProgressUpdateTime;
1874 gettimeofday(&lastProgressUpdateTime, 0);
1875
1876 bool allTrackFailed = false;
1877 {
1878 ///Use RAII style for setting the isDoingPartialUpdates flag so we're sure it gets removed
1879 IsTrackingFlagSetter_RAII __istrackingflag__(effect, this, frameStep, reportProgress, viewer, doPartialUpdates);
1880
1881 if ( (frameStep == 0) || ( (frameStep > 0) && (start >= end) ) || ( (frameStep < 0) && (start <= end) ) ) {
1882 // Invalid range
1883 cur = end;
1884 }
1885
1886
1887 std::function<bool (const std::size_t&)> track = [&](const std::size_t &i) {
1888 return TrackSchedulerPrivate::trackStepFunctor(i, *args, cur);
1889 };
1890 while (cur != end) {
1891 ///Launch parallel thread for each track using the global thread pool

Callers

nothing calls this directly

Calls 15

getEndMethod · 0.80
getStartMethod · 0.80
getStepMethod · 0.80
notifyTrackingStartedMethod · 0.80
unSlaveMethod · 0.80
getEffectInstanceMethod · 0.80
seekFrameMethod · 0.80
getRedrawAreasNeededMethod · 0.80
solveTransformParamsMethod · 0.80
cleanupTLSForThreadMethod · 0.80

Tested by

no test coverage detected