Changeset 887
- Timestamp:
- 03/07/08 20:27:18
- Files:
-
- trunk/applications/osgdem/osgdem.cpp (modified) (1 diff)
- trunk/applications/vpbmaster/vpbmaster.cpp (modified) (2 diffs)
- trunk/include/vpb/BuildLog (modified) (1 diff)
- trunk/include/vpb/System (modified) (3 diffs)
- trunk/include/vpb/TaskManager (modified) (1 diff)
- trunk/src/vpb/DataSet.cpp (modified) (11 diffs)
- trunk/src/vpb/System.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/applications/osgdem/osgdem.cpp
r832 r887 225 225 if (bo && !(bo->getLogFileName().empty())) 226 226 { 227 dataset->setBuildLog(new vpb::BuildLog );227 dataset->setBuildLog(new vpb::BuildLog(bo->getLogFileName())); 228 228 } 229 229 trunk/applications/vpbmaster/vpbmaster.cpp
r833 r887 86 86 { 87 87 std::string sourceFileName = taskManager->getBuildName() + std::string("_master.source"); 88 taskManager->setSourceFileName(sourceFileName); 89 taskManager->generateTasksFromSource(); 90 88 91 taskManager->writeSource(tasksOutputFileName); 89 90 taskManager->generateTasksFromSource();91 92 taskManager->writeTasks(tasksOutputFileName, true); 92 93 return 1; … … 104 105 tasksOutputFileName = taskManager->getBuildName() + std::string("_master.tasks"); 105 106 107 taskManager->setSourceFileName(sourceFileName); 108 taskManager->generateTasksFromSource(); 109 106 110 taskManager->writeSource(sourceFileName); 107 108 taskManager->generateTasksFromSource();109 111 taskManager->writeTasks(tasksOutputFileName, true); 110 112 trunk/include/vpb/BuildLog
r828 r887 185 185 const BuildLog* getBuildLog() const { return _buildLog.get(); } 186 186 187 void log(osg::NotifySeverity level, const char* format, ...) 187 void log(osg::NotifySeverity level, const char* format, ...) const 188 188 { 189 189 if (level>osg::getNotifyLevel()) return; trunk/include/vpb/System
r868 r887 35 35 extern VPB_EXPORT std::string& getMachineFileName(); 36 36 extern VPB_EXPORT std::string& getCacheFileName(); 37 extern VPB_EXPORT unsigned int getMaxNumberOfFilesPerDirectory(); 37 38 38 39 inline bool getAttributeValue(const std::string& field, const std::string& name, std::string& value) … … 110 111 unsigned long getFileSize(const std::string& filename); 111 112 113 unsigned int getMaxNumberOfFilesPerDirectory() const { return _maxNumberOfFilesPerDirectory; } 114 112 115 protected: 113 116 … … 122 125 std::string _machineFileName; 123 126 std::string _cacheFileName; 124 127 unsigned int _maxNumberOfFilesPerDirectory; 125 128 126 129 bool _trimOldestTiles; trunk/include/vpb/TaskManager
r829 r887 66 66 const std::string& getBuildName() const { return _buildName; } 67 67 68 void setSourceFileName(const std::string& sourceFileName) { _sourceFileName = sourceFileName; } 69 const std::string& getSourceFileName() const { return _sourceFileName; } 70 68 71 /** read the task list from file.*/ 69 72 bool writeSource(const std::string& filename); trunk/src/vpb/DataSet.cpp
r886 r887 2354 2354 bool DataSet::generateTasks(TaskManager* taskManager) 2355 2355 { 2356 if (!getLogFileName().empty()) 2357 { 2358 if (!getBuildLog()) setBuildLog(new BuildLog()); 2359 2360 getBuildLog()->openLogFile(getLogFileName()); 2356 if (!getLogFileName().empty() && !getBuildLog()) 2357 { 2358 setBuildLog(new BuildLog(getLogFileName())); 2361 2359 } 2362 2360 … … 2463 2461 else 2464 2462 { 2465 std::ostringstream taskfile; 2466 taskfile<<_tileBasename<<"_subtile_L"<<level<<"_X"<<X<<"_Y"<<Y; 2467 return taskfile.str(); 2463 if (getDistributedBuildSecondarySplitLevel()!=0 && level>=getDistributedBuildSecondarySplitLevel()-1) 2464 { 2465 unsigned int deltaLevels = getDistributedBuildSecondarySplitLevel()-getDistributedBuildSplitLevel(); 2466 unsigned int divisor = 1 << deltaLevels; 2467 unsigned int nestedX = X / divisor; 2468 unsigned int nestedY = Y / divisor; 2469 unsigned int nestedLevel = getDistributedBuildSplitLevel()-1; 2470 log(osg::NOTICE,"getTaskName(%i,%i,%i) requires nesting, divisor = %i (%i,%i,%i)",level,X,Y,divisor,nestedLevel, nestedX,nestedY); 2471 2472 std::ostringstream taskfile; 2473 taskfile<<_tileBasename<<"_subtile_L"<<nestedLevel<<"_X"<<nestedX<<"_Y"<<nestedY<<"/"; 2474 taskfile<<_tileBasename<<"_subtile_L"<<level<<"_X"<<X<<"_Y"<<Y; 2475 return taskfile.str(); 2476 } 2477 else 2478 { 2479 log(osg::NOTICE,"getTaskName(%i,%i,%i) no nest, %i %i",level,X,Y,getDistributedBuildSplitLevel(),getDistributedBuildSecondarySplitLevel()); 2480 2481 std::ostringstream taskfile; 2482 taskfile<<_tileBasename<<"_subtile_L"<<level<<"_X"<<X<<"_Y"<<Y; 2483 return taskfile.str(); 2484 } 2468 2485 } 2469 2486 } … … 2581 2598 taskManager->addTask(taskfile.str(), app.str(), sourceFile); 2582 2599 } 2583 2584 2600 2601 // create the tilemaps for the required split levels 2602 TilePairMap intermediateTileMap; 2603 if (getDistributedBuildSecondarySplitLevel()!=0) 2604 { 2605 createTileMap(getDistributedBuildSplitLevel()-1, intermediateTileMap); 2606 } 2607 2608 TilePairMap bottomTileMap; 2609 createTileMap(bottomDistributedBuildLevel-1, bottomTileMap); 2610 2611 unsigned int totalNumOfTasksSansRoot = intermediateTileMap.size() + bottomTileMap.size(); 2612 unsigned int taskCount = 0; 2613 unsigned int numTasksPerDirectory = getMaxNumberOfFilesPerDirectory(); 2614 2615 bool tooManyTasksForOneDirectory = totalNumOfTasksSansRoot > numTasksPerDirectory; 2616 2617 log(osg::NOTICE,"totalNumOfTasksSansRoot = %d", totalNumOfTasksSansRoot); 2618 2619 // initialize the variables used for nested secondary tasks within primary tasks 2620 unsigned int deltaLevels = 0; 2621 unsigned int divisor = 1; 2622 unsigned int nestedLevel = getDistributedBuildSplitLevel()-1; 2623 2585 2624 // need to create an intermediate level if required. 2586 2625 if (getDistributedBuildSecondarySplitLevel()!=0) … … 2588 2627 unsigned int level = getDistributedBuildSplitLevel()-1; 2589 2628 2590 TilePairMap tilepairMap; 2591 createTileMap(level, tilepairMap); 2592 2593 for(TilePairMap::iterator itr = tilepairMap.begin(); 2594 itr != tilepairMap.end(); 2629 for(TilePairMap::iterator itr = intermediateTileMap.begin(); 2630 itr != intermediateTileMap.end(); 2595 2631 ++itr) 2596 2632 { … … 2598 2634 unsigned int tileY = itr->first.second; 2599 2635 2636 unsigned int taskSet = taskCount / numTasksPerDirectory; 2637 2600 2638 std::ostringstream taskfile; 2601 taskfile<<taskDirectory<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".task"; 2639 taskfile<<taskDirectory; 2640 taskfile<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".task"; 2602 2641 2603 2642 … … 2615 2654 std::ostringstream logfile; 2616 2655 2617 logfile<<logDirectory<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".log"; 2656 logfile<<logDirectory; 2657 logfile<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".log"; 2618 2658 app<<" --log "<<logfile.str(); 2619 2659 } 2620 2660 2621 2661 taskManager->addTask(taskfile.str(), app.str(), sourceFile); 2622 } 2623 } 2662 2663 ++taskCount; 2664 } 2665 2666 // we have an intermediated level so the bottom level will need to be nested, so initiliaze 2667 // the deltaLevels and divisor for use in below. 2668 deltaLevels = getDistributedBuildSecondarySplitLevel()-getDistributedBuildSplitLevel(); 2669 divisor = 1 << deltaLevels; 2670 } 2671 2624 2672 2625 2673 // create the bottom level split … … 2627 2675 unsigned int level = bottomDistributedBuildLevel-1; 2628 2676 2629 TilePairMap tilepairMap; 2630 createTileMap(level, tilepairMap); 2631 2632 for(TilePairMap::iterator itr = tilepairMap.begin(); 2633 itr != tilepairMap.end(); 2677 for(TilePairMap::iterator itr = bottomTileMap.begin(); 2678 itr != bottomTileMap.end(); 2634 2679 ++itr) 2635 2680 { … … 2637 2682 unsigned int tileY = itr->first.second; 2638 2683 2684 unsigned int taskSet = taskCount / numTasksPerDirectory; 2685 2639 2686 std::ostringstream taskfile; 2640 taskfile<<taskDirectory<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".task"; 2687 taskfile<<taskDirectory; 2688 if (deltaLevels) 2689 { 2690 unsigned int nestedX = tileX / divisor; 2691 unsigned int nestedY = tileY / divisor; 2692 taskfile<<basename<<"_subtile_L"<<nestedLevel<<"_X"<<nestedX<<"_Y"<<nestedY<<"/"; 2693 2694 std::string path = taskfile.str(); 2695 vpb::mkpath(path.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); 2696 } 2697 taskfile<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".task"; 2641 2698 2642 2699 … … 2653 2710 std::ostringstream logfile; 2654 2711 2655 logfile<<logDirectory<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".log"; 2712 logfile<<logDirectory; 2713 if (deltaLevels) 2714 { 2715 unsigned int nestedX = tileX / divisor; 2716 unsigned int nestedY = tileY / divisor; 2717 logfile<<basename<<"_subtile_L"<<nestedLevel<<"_X"<<nestedX<<"_Y"<<nestedY<<"/"; 2718 2719 std::string path = logfile.str(); 2720 vpb::mkpath(path.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); 2721 } 2722 logfile<<basename<<"_subtile_L"<<level<<"_X"<<tileX<<"_Y"<<tileY<<".log"; 2656 2723 app<<" --log "<<logfile.str(); 2657 2724 } 2658 2725 2659 2726 taskManager->addTask(taskfile.str(), app.str(), sourceFile); 2727 2728 ++taskCount; 2660 2729 } 2661 2730 } … … 2667 2736 int DataSet::run() 2668 2737 { 2669 if (!getLogFileName().empty()) 2670 { 2671 if (!getBuildLog()) setBuildLog(new BuildLog()); 2672 2673 getBuildLog()->openLogFile(getLogFileName()); 2738 if (!getLogFileName().empty() && !getBuildLog()) 2739 { 2740 setBuildLog(new BuildLog(getLogFileName())); 2674 2741 } 2675 2742 … … 2693 2760 { 2694 2761 2762 log(osg::NOTICE,"DataSet::_run() %i %i",getDistributedBuildSplitLevel(),getDistributedBuildSecondarySplitLevel()); 2763 2695 2764 bool requiresGraphicsContextInMainThread = true; 2696 2765 trunk/src/vpb/System.cpp
r885 r887 49 49 std::string& vpb::getMachineFileName() { return System::instance()->getMachineFileName(); } 50 50 std::string& vpb::getCacheFileName() { return System::instance()->getCacheFileName(); } 51 unsigned int vpb::getMaxNumberOfFilesPerDirectory() { return System::instance()->getMaxNumberOfFilesPerDirectory(); } 51 52 52 53 /////////////////////////////////////////////////////////////////////////////////////////////////// … … 69 70 _taskDirectory = "tasks"; 70 71 72 _maxNumberOfFilesPerDirectory = 1000; 73 71 74 readEnvironmentVariables(); 72 75 … … 152 155 } 153 156 157 158 str = getenv("VPB_MAXIMUM_OF_FILES_PER_DIRECTORY"); 159 if (str) 160 { 161 _maxNumberOfFilesPerDirectory = atoi(str); 162 } 154 163 } 155 164
