00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _SO_LDM_RESOURCE_MANAGER_
00025 #define _SO_LDM_RESOURCE_MANAGER_
00026
00027 #ifdef _MSC_VER
00028 #pragma warning( push )
00029 #pragma warning(disable:4251)
00030 #endif
00031
00032 #include <LDM/SoLDMLargeDataManagement.h>
00033 #include <Inventor/SbVec.h>
00034 #include <Inventor/STL/vector>
00035 #include <LDM/SoLDMTopoOctree.h>
00036 #define MIN_RES_THRESHOLD 10000 //high number meaning not set
00037
00038 class SoDataSet;
00039
00040
00041 typedef void SoLDMTexFrontCB (void *userData);
00042
00060 SoEXTENDER_Documented class SoLDMResourceManager : public SoLDMLargeDataManagement
00061 {
00062 public:
00066 SoLDMResourceManager(SoDataSet* ds);
00067
00071 virtual ~SoLDMResourceManager();
00072
00073
00074 private:
00075
00076 enum LoadPolicy {
00077 NO_USER_INTERACTION,
00078 ALWAYS,
00079 NEVER
00080 };
00081
00086 void invalidateData();
00087
00093 static void setMultiIO(SbBool on);
00098 static SbBool getMultiIO();
00099
00100 static void setMonitoringAmount(int);
00101 static int getMonitoringAmount();
00102
00106 SbVec3i32 getTileSize() const;
00107
00111 int getDataSize();
00112
00116 void setTexelSize( int texelSize );
00117
00121 int getTexelSize();
00122
00126 SbVec3i32 getVolumeDim();
00127
00128 #if 1 SoDEPRECATED
00131 void setTex3LoadRate( int loadRate );
00132 SoDEPRECATED
00134 int getTex3LoadRate();
00135 SoDEPRECATED
00137 void setTex2LoadRate( int loadRate );
00138 SoDEPRECATED
00140 int getTex2LoadRate();
00141 SoDEPRECATED
00143 void setMinResolutionThreshold( int threshold = MIN_RES_THRESHOLD );
00144 SoDEPRECATED
00146 int getMinResolutionThreshold();
00147 SoDEPRECATED
00149 void setMaxResolutionThreshold( int threshold );
00150 SoDEPRECATED
00152 int getMaxResolutionThreshold();
00153
00154 #endif
00157 #if 1 SoDEPRECATED
00160 int getTileDimension();
00161
00162 #endif
00164 #if 1 SoDEPRECATED
00170 void setMaxMainMemory( int maxMainMemory );
00171 SoDEPRECATED
00176 int getMaxMainMemory();
00177 SoDEPRECATED
00179 void setMaxTexMemory( int maxTexMemoryMB );
00180 SoDEPRECATED
00182 int getMaxTexMemory();
00183 SoDEPRECATED
00188 int getMaxTilesInMainMem();
00189 SoDEPRECATED
00191 int getMaxTilesInTexMem();
00192 #endif
00194 #if 1 SoDEPRECATED
00204 void setTileHalfLife( float timeInSec );
00205 SoDEPRECATED
00210 float getTileHalfLife();
00211 SoDEPRECATED
00222 void setLoadPolicy( LoadPolicy loadPolicy );SoDEPRECATED
00227 LoadPolicy getLoadPolicy();
00228
00229
00230
00231
00232
00233
00234 SoDEPRECATED
00236 void setMovingTimeOut( float );
00237
00238
00239
00240
00241 SoDEPRECATED
00243 float getMovingTimeOut();
00244 SoDEPRECATED
00250 static void setTex2VVizLoadRate( int loadRate );
00251 SoDEPRECATED
00257 static int getTex2VVizLoadRate();
00258 SoDEPRECATED
00264 static void setTex3VVizLoadRate( int loadRate );
00265 SoDEPRECATED
00271 static int getTex3VVizLoadRate();
00272 SoDEPRECATED
00279 static void setMaxVVizMainMemory( int maxMainMemoryMB );
00280 SoDEPRECATED
00287 static void setMaxVVizTexMemory( int maxTexMemoryMB );
00288 SoDEPRECATED
00293 static int getMaxVVizMainMemory();
00294 SoDEPRECATED
00299 static int getMaxVVizTexMemory();
00300 SoDEPRECATED
00306 static void setNumIO( unsigned int numIO );
00307 SoDEPRECATED
00313 static unsigned int getNumIO();
00314 SoDEPRECATED
00321 static void setLoadNotificationRate( int rate );
00322 SoDEPRECATED
00327 static int getLoadNotificationRate();
00328
00329 #endif
00331 private:
00332 float m_decreaseWeightFactor;
00333 float getDecreaseWeightFactor() {return m_decreaseWeightFactor;};
00334
00338 void setTileSize( SbVec3i32 tileDim );
00339
00343 void setDataSize( int dataSize );
00344
00348 void setVolumeDim( const SbVec3i32& dim );
00349
00350 int getNumTileToTime();
00351
00352
00353
00354
00355
00356
00357 enum State
00358 {
00359 NO_UPDATE = 0x00,
00360 CPU_MEM_UPDATED = 0x01,
00361 GPU_MEM_UPDATED = 0x02,
00362 GPU_2D_UPDATED = 0x04,
00363 LOADRATE_2D_UPDATED = 0x08,
00364 LOADRATE_3D_UPDATED = 0x10,
00365 LOAD_RATE_UPDATED = 0x20,
00366 UPDATE_ALL = 0xFF
00367 };
00368
00369
00370 virtual void updateResources(unsigned short resourceState);
00371
00372
00373 int getMaxMainMemoryInKB() const;
00374 int getMaxTexMemoryInKB() const;
00375
00376
00377
00378
00379 int getSumOfMaxTilesInTexMem();
00380 int getSumOfTex3LoadRate();
00381 int getSumOfMax2DTextures();
00382 int getSumOfTex2LoadRate();
00383 void getSumOfMemAndTileSize(uint64_t &memByte, int& tileSize);
00384 void getSumOfNumTileInMem( uint64_t &maxTileInMem );
00385
00386 static void computeInternalCounters(const std::vector<SoLDMResourceManager*>& rsToUpdate);
00387 static void shareSpareResources(const std::vector<SoLDMResourceManager*>& rsToUpdate,
00388 size_t spareAmount, SoLDMResourceManager::State resourceType);
00389
00390
00391
00392
00393
00394
00395
00396 void allocateGPUResources(const std::vector<SoLDMResourceManager*>& rsToUpdate);
00397 void allocateCPUResources(const std::vector<SoLDMResourceManager*>& rsToUpdate);
00398 void allocateGPU2DResources(const std::vector<SoLDMResourceManager*>& rsToUpdate);
00399 void allocateTex2LoadRate(const std::vector<SoLDMResourceManager*>& rsToUpdate);
00400 void allocateTex3LoadRate(const std::vector<SoLDMResourceManager*>& rsToUpdate);
00401
00402 void setIdealTextFrontCb( SoLDMTexFrontCB *func, void* userData = NULL);
00403 void idealTexFrontReached();
00404 SoLDMTexFrontCB* m_callbackFunc;
00405 void* m_userData;
00406 SoDataSet* getDataSet() { return m_ds; };
00407
00411 static uint64_t getMaxVViz2DTexMemory();
00412
00416 static void setMaxVViz2DTexMemory(uint64_t maxMemory);
00417
00421 void setMax2DTexMemory(int max2DTexMemory);
00422
00426 int getMax2DTexMemory();
00427
00428 private:
00429
00430 int m_minResThreshold;
00431 int m_maxResThreshold;
00432
00433
00434
00435 friend class SoLDMMultiIOTileManager;
00436 friend class SoLDMMediator;
00437
00438
00439 static void updateNumTilesInMainMem();
00440
00442 static void updateMaxMainMem();
00443
00445 static void updateSumMax2DTextures();
00446
00451 static const std::vector<SoLDMResourceManager*>& getRSToUpdate();
00452
00454
00455 static int s_maxVVizTexMemoryKB;
00456
00457 int m_maxTexMemoryKB;
00458
00459 int m_numTilesInTexMem;
00460
00461 static void updateNumTilesInTexMem();
00462
00464 static void updateMaxTexMem();
00465
00466
00467
00468
00469 static void checkParametersConsistency(const std::vector<SoLDMResourceManager*>& rsToUpdate);
00470
00472
00473 static int s_tex3VVizLoadRate;
00474 int m_tex3LoadRate;
00475
00476
00477
00478 static uint64_t s_maxVViz2DTexMemory;
00479 uint64_t m_num2DTextures;
00480
00481
00482 static int s_tex2VVizLoadRate;
00483 int m_tex2LoadRate;
00484
00485
00486
00487 static int s_maxVVizMainMemoryKB;
00488 int m_maxMainMemoryKB;
00489
00490 int m_numTilesInMainMem;
00491
00492 static int s_loadNotificationRate;
00493 static int s_memToLoad;
00494
00495
00496 static unsigned int s_numIO;
00497 static SbBool s_isMultiIO;
00498
00499
00500 SbVec3i32 m_tileDimension;
00501 int m_dataSize;
00502 int m_texelSize;
00503
00504
00505
00506
00507 SbVec3i32 m_volDim;
00508
00509
00510
00511 static std::vector<SoLDMResourceManager*> s_resourceManagers;
00512
00513
00514
00515 SoLDMTopoOctree m_topoOctree;
00516
00517 float getDataTileSizeInKB();
00518 float getTexTileSizeInByte(bool is3DTile = false);
00519
00520
00521
00522 void adjustMemPerDataset(const std::vector<SoLDMResourceManager*>& rsToUpdate);
00523
00524 SoDataSet* m_ds;
00525
00526
00527 int m_getSumOfMaxTilesInTexMemAdjusted;
00528 int m_getSumOfMaxTilesInTexMem;
00529
00534 size_t m_maxNeededMemKB;
00535
00536
00537
00538 static std::vector<SoLDMResourceManager*> s_rsToUpdate;
00539
00540
00541 static std::map<SoLDMMediator*, int> s_maskPerMediator;
00542
00543
00544
00545
00546
00547 static size_t s_nbVolumeData;
00548
00549
00550
00551 static size_t s_gpuMemPerDataSetKB;
00552
00553
00554
00555 static size_t s_cpuMemPerDataSetKB;
00556
00557
00558
00559 static uint64_t s_2DGpuTexMemoryPerDataSetMB;
00560
00561
00562
00563 static size_t s_tex2LoadRatePerDataSet;
00564
00565
00566
00567 static size_t s_tex3LoadRatePerDataSet;
00568
00569
00570 static size_t s_spareGpuMemoryKB;
00571
00572
00573 static size_t s_spareCpuMemoryKB;
00574
00575
00576 static size_t s_spareTex2LoadRate;
00577
00578
00579 static size_t s_spareTex3LoadRate;
00580
00585 static SbThreadMutex s_globalResourcesMutex;
00586 };
00587
00588
00589 #ifdef _MSC_VER
00590 #pragma warning( pop )
00591 #endif
00592
00593 #endif // _SO_LDM_RESOURCE_MANAGER_
00594
00595
00596