[Test] Added tests for CUtil::SplitParams
[xbmc.git] / xbmc / guilib / DirtyRegionTracker.cpp
bloba016601ad9e6e1ad624ac559936ddd8b7e60bf90
1 /*
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.
7 */
9 #include "DirtyRegionTracker.h"
11 #include "DirtyRegionSolvers.h"
12 #include "ServiceBroker.h"
13 #include "guilib/DirtyRegion.h"
14 #include "settings/AdvancedSettings.h"
15 #include "settings/SettingsComponent.h"
16 #include "utils/log.h"
18 #include <algorithm>
19 #include <stdio.h>
21 CDirtyRegionTracker::CDirtyRegionTracker(int buffering)
23 m_buffering = buffering;
24 m_solver = NULL;
27 CDirtyRegionTracker::~CDirtyRegionTracker()
29 delete m_solver;
32 void CDirtyRegionTracker::SelectAlgorithm()
34 delete m_solver;
36 switch (CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_guiAlgorithmDirtyRegions)
38 case DIRTYREGION_SOLVER_FILL_VIEWPORT_ON_CHANGE:
39 CLog::Log(LOGDEBUG, "guilib: Fill viewport on change for solving rendering passes");
40 m_solver = new CFillViewportOnChangeRegionSolver();
41 break;
42 case DIRTYREGION_SOLVER_COST_REDUCTION:
43 CLog::Log(LOGDEBUG, "guilib: Cost reduction as algorithm for solving rendering passes");
44 m_solver = new CGreedyDirtyRegionSolver();
45 break;
46 case DIRTYREGION_SOLVER_UNION:
47 m_solver = new CUnionDirtyRegionSolver();
48 CLog::Log(LOGDEBUG, "guilib: Union as algorithm for solving rendering passes");
49 break;
50 case DIRTYREGION_SOLVER_FILL_VIEWPORT_ALWAYS:
51 default:
52 CLog::Log(LOGDEBUG, "guilib: Fill viewport always for solving rendering passes");
53 m_solver = new CFillViewportAlwaysRegionSolver();
54 break;
58 void CDirtyRegionTracker::MarkDirtyRegion(const CDirtyRegion &region)
60 if (!region.IsEmpty())
61 m_markedRegions.push_back(region);
64 const CDirtyRegionList &CDirtyRegionTracker::GetMarkedRegions() const
66 return m_markedRegions;
69 CDirtyRegionList CDirtyRegionTracker::GetDirtyRegions()
71 CDirtyRegionList output;
73 if (m_solver)
74 m_solver->Solve(m_markedRegions, output);
76 return output;
79 void CDirtyRegionTracker::CleanMarkedRegions()
81 int buffering = CServiceBroker::GetSettingsComponent()->GetAdvancedSettings()->m_guiVisualizeDirtyRegions ? 20 : m_buffering;
82 m_markedRegions.erase(
83 std::remove_if(m_markedRegions.begin(), m_markedRegions.end(),
84 [buffering](CDirtyRegion& r) { return r.UpdateAge() >= buffering; }),
85 m_markedRegions.end());