diff --git a/include/PolyVox/FilePager.h b/include/PolyVox/FilePager.h index 04eb3b04..60a4cba7 100644 --- a/include/PolyVox/FilePager.h +++ b/include/PolyVox/FilePager.h @@ -56,13 +56,12 @@ namespace PolyVox m_strFolderName.append("/"); } - // Build a unique prefix to avoid multiple pagers using the same filenames. - srand(static_cast(time(0))); - int iRandomValue = rand(); - + // Build a unique postfix to avoid filename conflicts between multiple pagers/runs. + // Not a very robust solution but this class is meant as an example for testing really. std::stringstream ss; - ss << std::hex << iRandomValue; - m_strRandomPrefix = ss.str(); + ss << time(0) << "--"; // Avoid multiple runs using the same filenames. + ss << this; // Avoid multiple FilePagers using the same filenames. + m_strPostfix = ss.str(); } /// Destructor @@ -82,9 +81,10 @@ namespace PolyVox POLYVOX_ASSERT(pChunk->getData(), "Chunk must have valid data"); std::stringstream ssFilename; - ssFilename << m_strFolderName << "/" << m_strRandomPrefix << "-" + ssFilename << m_strFolderName << "/" << region.getLowerX() << "_" << region.getLowerY() << "_" << region.getLowerZ() << "_" - << region.getUpperX() << "_" << region.getUpperY() << "_" << region.getUpperZ(); + << region.getUpperX() << "_" << region.getUpperY() << "_" << region.getUpperZ() + << "--" << m_strPostfix; std::string filename = ssFilename.str(); @@ -133,9 +133,10 @@ namespace PolyVox POLYVOX_LOG_TRACE("Paging out data for " << region); std::stringstream ssFilename; - ssFilename << m_strFolderName << "/" << m_strRandomPrefix << "-" + ssFilename << m_strFolderName << "/" << region.getLowerX() << "_" << region.getLowerY() << "_" << region.getLowerZ() << "_" - << region.getUpperX() << "_" << region.getUpperY() << "_" << region.getUpperZ(); + << region.getUpperX() << "_" << region.getUpperY() << "_" << region.getUpperZ() + << "--" << m_strPostfix; std::string filename = ssFilename.str(); @@ -163,7 +164,7 @@ namespace PolyVox protected: std::string m_strFolderName; - std::string m_strRandomPrefix; + std::string m_strPostfix; std::vector m_vecCreatedFiles; }; diff --git a/tests/testvolume.cpp b/tests/testvolume.cpp index d17d4e4b..a35cdaa6 100644 --- a/tests/testvolume.cpp +++ b/tests/testvolume.cpp @@ -225,7 +225,7 @@ int32_t testDirectRandomAccess(const VolumeType* volume) std::mt19937 rng; int32_t result = 0; - for (uint32_t ct = 0; ct < 10000; ct++) + for (uint32_t ct = 0; ct < 1000000; ct++) { uint32_t rand = rng(); @@ -258,10 +258,12 @@ TestVolume::TestVolume() m_regExternal.shiftUpperCorner(2, 5, 4); m_pFilePager = new FilePager("."); + m_pFilePagerHighMem = new FilePager("."); //Create the volumes m_pRawVolume = new RawVolume(m_regVolume); m_pPagedVolume = new PagedVolume(m_pFilePager, 1 * 1024 * 1024, m_uChunkSideLength); + m_pPagedVolumeHighMem = new PagedVolume(m_pFilePagerHighMem, 256 * 1024 * 1024, m_uChunkSideLength); //Fill the volume with some data for (int z = m_regVolume.getLowerZ(); z <= m_regVolume.getUpperZ(); z++) @@ -273,11 +275,11 @@ TestVolume::TestVolume() int32_t value = x + y + z; m_pRawVolume->setVoxel(x, y, z, value); m_pPagedVolume->setVoxel(x, y, z, value); + m_pPagedVolumeHighMem->setVoxel(x, y, z, value); } } } - // Note - We are reusing the FilePager for testing... watch out for conflicts with the main volume. m_pPagedVolumeChunk = new PagedVolume::Chunk(Vector3DInt32(10000, 10000, 10000), m_uChunkSideLength, nullptr); std::mt19937 rng; for (uint16_t z = 0; z < m_uChunkSideLength; z++) @@ -488,7 +490,7 @@ void TestVolume::testRawVolumeDirectRandomAccess() { result = testDirectRandomAccess(m_pRawVolume); } - QCOMPARE(result, static_cast(805464457)); + QCOMPARE(result, static_cast(267192737)); } void TestVolume::testPagedVolumeDirectRandomAccess() @@ -496,9 +498,9 @@ void TestVolume::testPagedVolumeDirectRandomAccess() int32_t result = 0; QBENCHMARK { - result = testDirectRandomAccess(m_pPagedVolume); + result = testDirectRandomAccess(m_pPagedVolumeHighMem); } - QCOMPARE(result, static_cast(805464457)); + QCOMPARE(result, static_cast(267192737)); } int32_t TestVolume::testPagedVolumeChunkAccess(uint16_t localityMask) diff --git a/tests/testvolume.h b/tests/testvolume.h index a7645977..624c155c 100644 --- a/tests/testvolume.h +++ b/tests/testvolume.h @@ -72,6 +72,7 @@ private: PolyVox::Region m_regInternal; PolyVox::Region m_regExternal; PolyVox::FilePager* m_pFilePager; + PolyVox::FilePager* m_pFilePagerHighMem; PolyVox::RawVolume* m_pRawVolume; PolyVox::PagedVolume* m_pPagedVolume;