Krita Source Code Documentation
Loading...
Searching...
No Matches
KisIdleTaskStrokeStrategy Class Reference

#include <KisIdleTaskStrokeStrategy.h>

+ Inheritance diagram for KisIdleTaskStrokeStrategy:

Signals

void sigIdleTaskFinished ()
 

Public Member Functions

KisStrokeStrategycreateLodClone (int levelOfDetail) override
 
QWeakPointer< boost::none_t > idleTaskCookie ()
 
 KisIdleTaskStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
 ~KisIdleTaskStrokeStrategy ()
 
- Public Member Functions inherited from KisRunnableBasedStrokeStrategy
void doStrokeCallback (KisStrokeJobData *data) override
 
 KisRunnableBasedStrokeStrategy (const KisRunnableBasedStrokeStrategy &rhs)
 
 KisRunnableBasedStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
KisRunnableStrokeJobsInterfacerunnableJobsInterface () const
 
 ~KisRunnableBasedStrokeStrategy ()
 
- Public Member Functions inherited from KisSimpleStrokeStrategy
virtual void cancelStrokeCallback ()
 
KisStrokeJobDatacreateCancelData () override
 
KisStrokeJobStrategycreateCancelStrategy () override
 
KisStrokeJobStrategycreateDabStrategy () override
 
KisStrokeJobDatacreateFinishData () override
 
KisStrokeJobStrategycreateFinishStrategy () override
 
KisStrokeJobDatacreateInitData () override
 
KisStrokeJobStrategycreateInitStrategy () override
 
KisStrokeJobDatacreateResumeData () override
 
KisStrokeJobStrategycreateResumeStrategy () override
 
KisStrokeJobDatacreateSuspendData () override
 
KisStrokeJobStrategycreateSuspendStrategy () override
 
 KisSimpleStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
virtual void resumeStrokeCallback ()
 
virtual void suspendStrokeCallback ()
 
- Public Member Functions inherited from KisStrokeStrategy
qreal balancingRatioOverride () const
 
bool canForgetAboutMe () const
 
bool clearsRedoOnStart () const
 
KisLodPreferences currentLodPreferences () const
 
bool forceLodModeIfPossible () const
 
QString id () const
 
bool isAsynchronouslyCancellable () const
 
bool isExclusive () const
 
 KisStrokeStrategy (const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
 
KUndo2MagicString name () const
 
bool needsExplicitCancel () const
 
virtual void notifyUserEndedStroke ()
 
virtual void notifyUserStartedStroke ()
 
bool requestsOtherStrokesToEnd () const
 
void setForceLodModeIfPossible (bool forceLodModeIfPossible)
 
void setMutatedJobsInterface (KisStrokesQueueMutatedJobInterface *mutatedJobsInterface, KisStrokeId strokeId)
 
bool supportsWrapAroundMode () const
 
virtual void tryCancelCurrentStrokeJobAsync ()
 tryCancelCurrentStrokeJobAsync is called by the strokes queue when the stroke is being cancelled. The stroke strategy may or may not handle this request and cancel the currently running long action.
 
virtual ~KisStrokeStrategy ()
 

Static Public Member Functions

static int preferredIdleTaskMaximumTime ()
 
static int preferredIdleWatcherInterval ()
 
- Static Public Member Functions inherited from KisSimpleStrokeStrategy
static QLatin1String jobTypeToString (JobType type)
 

Protected Member Functions

void finishStrokeCallback () override
 
void initStrokeCallback () override
 
- Protected Member Functions inherited from KisSimpleStrokeStrategy
void enableJob (JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
 
 KisSimpleStrokeStrategy (const KisSimpleStrokeStrategy &rhs)
 
- Protected Member Functions inherited from KisStrokeStrategy
void addMutatedJob (KisStrokeJobData *data)
 
void addMutatedJobs (const QVector< KisStrokeJobData * > list)
 
 KisStrokeStrategy (const KisStrokeStrategy &rhs)
 
void setAsynchronouslyCancellable (bool value)
 
void setBalancingRatioOverride (qreal value)
 
void setCanForgetAboutMe (bool value)
 
void setClearsRedoOnStart (bool value)
 
void setExclusive (bool value)
 
void setNeedsExplicitCancel (bool value)
 
void setRequestsOtherStrokesToEnd (bool value)
 
void setSupportsWrapAroundMode (bool value)
 

Private Attributes

QElapsedTimer m_idleStrokeTime
 
QSharedPointer< boost::none_t > m_idleTaskCookie
 

Additional Inherited Members

- Public Types inherited from KisSimpleStrokeStrategy
enum  JobType {
  JOB_INIT = 0 , JOB_CANCEL , JOB_FINISH , JOB_DOSTROKE ,
  JOB_SUSPEND , JOB_RESUME , NJOBS
}
 

Detailed Description

A base class for strategies used in "idle tasks". Such strategy does not modify any undo stack and can be cancelled by the image at any moment (e.g. when the user starts a real brush stroke).

If you need to handle the cancellation event, implement cancelStrokeCallback() function.

Definition at line 26 of file KisIdleTaskStrokeStrategy.h.

Constructor & Destructor Documentation

◆ KisIdleTaskStrokeStrategy()

KisIdleTaskStrokeStrategy::KisIdleTaskStrokeStrategy ( const QLatin1String & id,
const KUndo2MagicString & name = KUndo2MagicString() )

Definition at line 9 of file KisIdleTaskStrokeStrategy.cpp.

11{
16
20}
KisRunnableBasedStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())
void enableJob(JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
void setClearsRedoOnStart(bool value)
void setRequestsOtherStrokesToEnd(bool value)
void setCanForgetAboutMe(bool value)
KUndo2MagicString name() const

References KisStrokeJobData::BARRIER, KisSimpleStrokeStrategy::enableJob(), KisStrokeJobData::EXCLUSIVE, KisSimpleStrokeStrategy::JOB_CANCEL, KisSimpleStrokeStrategy::JOB_DOSTROKE, KisSimpleStrokeStrategy::JOB_FINISH, KisSimpleStrokeStrategy::JOB_INIT, KisStrokeJobData::SEQUENTIAL, KisStrokeStrategy::setCanForgetAboutMe(), KisStrokeStrategy::setClearsRedoOnStart(), and KisStrokeStrategy::setRequestsOtherStrokesToEnd().

◆ ~KisIdleTaskStrokeStrategy()

KisIdleTaskStrokeStrategy::~KisIdleTaskStrokeStrategy ( )
default

Member Function Documentation

◆ createLodClone()

KisStrokeStrategy * KisIdleTaskStrokeStrategy::createLodClone ( int levelOfDetail)
overridevirtual

We do not generate preview for Instant Preview mode. Even though we could do that, it is not very needed, because KisIdleWatcher ensures that overview preview is generated only when all the background jobs are completed.

The only thing we should do about Instant Preview is to avoid resetting LoDN planes, when the thumbnail is running. Therefore we should return a fake noop strategy as our LoDN clone (that is a marker of non-legacy stroke for the scheduler)

Reimplemented from KisStrokeStrategy.

Definition at line 25 of file KisIdleTaskStrokeStrategy.cpp.

26{
27 Q_UNUSED(levelOfDetail);
39 return new KisSimpleStrokeStrategy(QLatin1String("KisIdleTaskStrokeStrategy_FakeLodN"));
40}
KisSimpleStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name=KUndo2MagicString())

References KisSimpleStrokeStrategy::KisSimpleStrokeStrategy().

◆ finishStrokeCallback()

void KisIdleTaskStrokeStrategy::finishStrokeCallback ( )
overrideprotectedvirtual

Just a small sanity check if idle tasks don't occupy too much time and don't interfere with user's workflow. Theoretically, even if the time consumed is too high, it may still be acceptable if the task is split in multiple jobs, which would be cancelled but the user's action.

Reimplemented from KisSimpleStrokeStrategy.

Definition at line 47 of file KisIdleTaskStrokeStrategy.cpp.

48{
49 Q_EMIT sigIdleTaskFinished();
50
57 const qint64 elapsedTime = m_idleStrokeTime.elapsed();
58
59 if (elapsedTime > preferredIdleTaskMaximumTime()) {
60 qWarning() << "WARNING: idle task consumed more than" <<
62 "ms, it can cause visible distractions to the user";
63 qWarning() << "WARNING: time consumed in" << id() <<
64 "is" << elapsedTime << "ms";
65 }
66}

References KisStrokeStrategy::id(), m_idleStrokeTime, preferredIdleTaskMaximumTime(), and sigIdleTaskFinished().

◆ idleTaskCookie()

QWeakPointer< boost::none_t > KisIdleTaskStrokeStrategy::idleTaskCookie ( )

Definition at line 68 of file KisIdleTaskStrokeStrategy.cpp.

69{
71 m_idleTaskCookie.reset(new boost::none_t(boost::none));
72 return m_idleTaskCookie;
73}
QSharedPointer< boost::none_t > m_idleTaskCookie
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
Definition kis_assert.h:129

References KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE, and m_idleTaskCookie.

◆ initStrokeCallback()

void KisIdleTaskStrokeStrategy::initStrokeCallback ( )
overrideprotectedvirtual

Reimplemented from KisSimpleStrokeStrategy.

Reimplemented in KisImageThumbnailStrokeStrategyBase, and ThumbnailsStroke.

Definition at line 42 of file KisIdleTaskStrokeStrategy.cpp.

43{
44 m_idleStrokeTime.start();
45}

References m_idleStrokeTime.

◆ preferredIdleTaskMaximumTime()

int KisIdleTaskStrokeStrategy::preferredIdleTaskMaximumTime ( )
static

Sometimes (unless split into multiple jobs) idle tasks can interfere with user actions. We have a sanity check that checks if the tasks are quick enough to not interfere into the user's actions. This time limit is the maximum "allowed" idle task size.

Definition of "allowed" here is not strict, since the tasks are not cancelled when reaching the limit. Just a warning is spit into the terminal.

Definition at line 75 of file KisIdleTaskStrokeStrategy.cpp.

76{
88 return 200; // ms
89}

◆ preferredIdleWatcherInterval()

int KisIdleTaskStrokeStrategy::preferredIdleWatcherInterval ( )
static

Preferred idle watcher interval for checks of the image idleness state. Idle watcher checks the image four times before starting an idle task, so the actual idle task delay is 4 * preferredIdleWatcherInterval() milliseconds.

Definition at line 91 of file KisIdleTaskStrokeStrategy.cpp.

92{
99 return 50; // ms
100}

◆ sigIdleTaskFinished

void KisIdleTaskStrokeStrategy::sigIdleTaskFinished ( )
signal

Member Data Documentation

◆ m_idleStrokeTime

QElapsedTimer KisIdleTaskStrokeStrategy::m_idleStrokeTime
private

Definition at line 47 of file KisIdleTaskStrokeStrategy.h.

◆ m_idleTaskCookie

QSharedPointer<boost::none_t> KisIdleTaskStrokeStrategy::m_idleTaskCookie
private

Definition at line 46 of file KisIdleTaskStrokeStrategy.h.


The documentation for this class was generated from the following files: