2 * Copyright (C) 2005-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
9 #include "DirtyRegionTracker.h"
11 #include "DirtyRegionSolvers.h"
12 #include "ServiceBroker.h"
13 #include "settings/AdvancedSettings.h"
14 #include "settings/SettingsComponent.h"
15 #include "utils/log.h"
19 CDirtyRegionTracker::CDirtyRegionTracker(int buffering
)
21 m_buffering
= buffering
;
25 CDirtyRegionTracker::~CDirtyRegionTracker()
30 void CDirtyRegionTracker::SelectAlgorithm()
34 switch (CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_guiAlgorithmDirtyRegions
)
36 case DIRTYREGION_SOLVER_FILL_VIEWPORT_ON_CHANGE
:
37 CLog::Log(LOGDEBUG
, "guilib: Fill viewport on change for solving rendering passes");
38 m_solver
= new CFillViewportOnChangeRegionSolver();
40 case DIRTYREGION_SOLVER_COST_REDUCTION
:
41 CLog::Log(LOGDEBUG
, "guilib: Cost reduction as algorithm for solving rendering passes");
42 m_solver
= new CGreedyDirtyRegionSolver();
44 case DIRTYREGION_SOLVER_UNION
:
45 m_solver
= new CUnionDirtyRegionSolver();
46 CLog::Log(LOGDEBUG
, "guilib: Union as algorithm for solving rendering passes");
48 case DIRTYREGION_SOLVER_FILL_VIEWPORT_ALWAYS
:
50 CLog::Log(LOGDEBUG
, "guilib: Fill viewport always for solving rendering passes");
51 m_solver
= new CFillViewportAlwaysRegionSolver();
56 void CDirtyRegionTracker::MarkDirtyRegion(const CDirtyRegion
®ion
)
58 if (!region
.IsEmpty())
59 m_markedRegions
.push_back(region
);
62 const CDirtyRegionList
&CDirtyRegionTracker::GetMarkedRegions() const
64 return m_markedRegions
;
67 CDirtyRegionList
CDirtyRegionTracker::GetDirtyRegions()
69 CDirtyRegionList output
;
72 m_solver
->Solve(m_markedRegions
, output
);
77 void CDirtyRegionTracker::CleanMarkedRegions()
79 int buffering
= CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_guiVisualizeDirtyRegions
? 20 : m_buffering
;
80 int i
= m_markedRegions
.size() - 1;
83 if (m_markedRegions
[i
].UpdateAge() >= buffering
)
84 m_markedRegions
.erase(m_markedRegions
.begin() + i
);