Mercurial > hg > svcore
comparison base/StorageAdviser.cpp @ 384:6f6ab834449d spectrogram-cache-rejig
* Merge from trunk
author | Chris Cannam |
---|---|
date | Wed, 27 Feb 2008 11:59:42 +0000 |
parents | 02d2ad95ea52 |
children | 52303ec15cd2 |
comparison
equal
deleted
inserted
replaced
337:a6fab10ff9e6 | 384:6f6ab834449d |
---|---|
20 | 20 |
21 #include "system/System.h" | 21 #include "system/System.h" |
22 | 22 |
23 #include <iostream> | 23 #include <iostream> |
24 | 24 |
25 //#define DEBUG_STORAGE_ADVISER 1 | |
26 | |
25 long StorageAdviser::m_discPlanned = 0; | 27 long StorageAdviser::m_discPlanned = 0; |
26 long StorageAdviser::m_memoryPlanned = 0; | 28 long StorageAdviser::m_memoryPlanned = 0; |
27 | 29 |
28 StorageAdviser::Recommendation | 30 StorageAdviser::Recommendation |
29 StorageAdviser::recommend(Criteria criteria, | 31 StorageAdviser::recommend(Criteria criteria, |
30 int minimumSize, | 32 int minimumSize, |
31 int maximumSize) | 33 int maximumSize) |
32 { | 34 { |
35 #ifdef DEBUG_STORAGE_ADVISER | |
33 std::cerr << "StorageAdviser::recommend: Criteria " << criteria | 36 std::cerr << "StorageAdviser::recommend: Criteria " << criteria |
34 << ", minimumSize " << minimumSize | 37 << ", minimumSize " << minimumSize |
35 << ", maximumSize " << maximumSize << std::endl; | 38 << ", maximumSize " << maximumSize << std::endl; |
39 #endif | |
36 | 40 |
37 QString path = TempDirectory::getInstance()->getPath(); | 41 QString path = TempDirectory::getInstance()->getPath(); |
38 int discFree = GetDiscSpaceMBAvailable(path.toLocal8Bit()); | 42 int discFree = GetDiscSpaceMBAvailable(path.toLocal8Bit()); |
39 int memoryFree, memoryTotal; | 43 int memoryFree, memoryTotal; |
40 GetRealMemoryMBAvailable(memoryFree, memoryTotal); | 44 GetRealMemoryMBAvailable(memoryFree, memoryTotal); |
49 memoryFree -= m_memoryPlanned / 1024 + 1; | 53 memoryFree -= m_memoryPlanned / 1024 + 1; |
50 } else if (memoryFree > 0) { // can also be -1 for unknown | 54 } else if (memoryFree > 0) { // can also be -1 for unknown |
51 memoryFree = 0; | 55 memoryFree = 0; |
52 } | 56 } |
53 | 57 |
58 #ifdef DEBUG_STORAGE_ADVISER | |
54 std::cerr << "Disc space: " << discFree << ", memory free: " << memoryFree << ", memory total: " << memoryTotal << ", min " << minimumSize << ", max " << maximumSize << std::endl; | 59 std::cerr << "Disc space: " << discFree << ", memory free: " << memoryFree << ", memory total: " << memoryTotal << ", min " << minimumSize << ", max " << maximumSize << std::endl; |
60 #endif | |
55 | 61 |
56 //!!! We have a potentially serious problem here if multiple | 62 //!!! We have a potentially serious problem here if multiple |
57 //recommendations are made in advance of any of the resulting | 63 //recommendations are made in advance of any of the resulting |
58 //allocations, as the allocations that have been recommended for | 64 //allocations, as the allocations that have been recommended for |
59 //won't be taken into account in subsequent recommendations. | 65 //won't be taken into account in subsequent recommendations. |
84 else if (minmb > (discFree * 3) / 4) discStatus = Insufficient; | 90 else if (minmb > (discFree * 3) / 4) discStatus = Insufficient; |
85 else if (maxmb > (discFree / 4)) discStatus = Marginal; | 91 else if (maxmb > (discFree / 4)) discStatus = Marginal; |
86 else if (minmb > (discFree / 10)) discStatus = Marginal; | 92 else if (minmb > (discFree / 10)) discStatus = Marginal; |
87 else discStatus = Sufficient; | 93 else discStatus = Sufficient; |
88 | 94 |
95 #ifdef DEBUG_STORAGE_ADVISER | |
89 std::cerr << "Memory status: " << memoryStatus << ", disc status " | 96 std::cerr << "Memory status: " << memoryStatus << ", disc status " |
90 << discStatus << std::endl; | 97 << discStatus << std::endl; |
98 #endif | |
91 | 99 |
92 int recommendation = NoRecommendation; | 100 int recommendation = NoRecommendation; |
93 | 101 |
94 if (memoryStatus == Insufficient || memoryStatus == Unknown) { | 102 if (memoryStatus == Insufficient || memoryStatus == Unknown) { |
95 | 103 |