mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	Time estimator: Added consumed memory tracing, replaced std::map
with std::vector for lower memory consumption.
This commit is contained in:
		
							parent
							
								
									d6b8ed3e3e
								
							
						
					
					
						commit
						bffcaeff41
					
				
					 4 changed files with 31 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -1231,7 +1231,7 @@ void GCode::process_layer(
 | 
			
		|||
    const Print                     &print,
 | 
			
		||||
    // Set of object & print layers of the same PrintObject and with the same print_z.
 | 
			
		||||
    const std::vector<LayerToPrint> &layers,
 | 
			
		||||
    const LayerTools  &layer_tools,
 | 
			
		||||
    const LayerTools                &layer_tools,
 | 
			
		||||
    // If set to size_t(-1), then print all copies of all objects.
 | 
			
		||||
    // Otherwise print a single copy of a single object.
 | 
			
		||||
    const size_t                     single_object_idx)
 | 
			
		||||
| 
						 | 
				
			
			@ -1644,6 +1644,8 @@ void GCode::process_layer(
 | 
			
		|||
    // printf("G-code after filter:\n%s\n", out.c_str());
 | 
			
		||||
    
 | 
			
		||||
    _write(file, gcode);
 | 
			
		||||
    BOOST_LOG_TRIVIAL(trace) << "Exported layer " << layer.id() << " print_z " << print_z << ", time estimator memory: " + 
 | 
			
		||||
        format_memsize_MB(m_normal_time_estimator.memory_used() + m_silent_time_estimator_enabled ? m_silent_time_estimator.memory_used() : 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void GCode::apply_print_config(const PrintConfig &print_config)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -309,8 +309,9 @@ namespace Slic3r {
 | 
			
		|||
               gcode_line += "\n";
 | 
			
		||||
 | 
			
		||||
            // add remaining time lines where needed
 | 
			
		||||
            G1LineIdToBlockIdMap::const_iterator it_line_id = _g1_line_ids.begin();
 | 
			
		||||
            _parser.parse_line(gcode_line,
 | 
			
		||||
                [this, &g1_lines_count, &last_recorded_time, &time_line, &gcode_line, time_mask, interval](GCodeReader& reader, const GCodeReader::GCodeLine& line)
 | 
			
		||||
                [this, &it_line_id, &g1_lines_count, &last_recorded_time, &time_line, &gcode_line, time_mask, interval](GCodeReader& reader, const GCodeReader::GCodeLine& line)
 | 
			
		||||
            {
 | 
			
		||||
                if (line.cmd_is("G1"))
 | 
			
		||||
                {
 | 
			
		||||
| 
						 | 
				
			
			@ -319,10 +320,10 @@ namespace Slic3r {
 | 
			
		|||
                    if (!line.has_e())
 | 
			
		||||
                        return;
 | 
			
		||||
 | 
			
		||||
                    G1LineIdToBlockIdMap::const_iterator it = _g1_line_ids.find(g1_lines_count);
 | 
			
		||||
                    if ((it != _g1_line_ids.end()) && (it->second < (unsigned int)_blocks.size()))
 | 
			
		||||
                    if ((it_line_id != _g1_line_ids.end()) && (it_line_id->first == g1_lines_count) && (it_line_id->second < (unsigned int)_blocks.size()))
 | 
			
		||||
                    {
 | 
			
		||||
                        const Block& block = _blocks[it->second];
 | 
			
		||||
                        const Block& block = _blocks[it_line_id->second];
 | 
			
		||||
                        ++ it_line_id;
 | 
			
		||||
                        if (block.elapsed_time != -1.0f)
 | 
			
		||||
                        {
 | 
			
		||||
                            float block_remaining_time = _time - block.elapsed_time;
 | 
			
		||||
| 
						 | 
				
			
			@ -667,6 +668,21 @@ namespace Slic3r {
 | 
			
		|||
        return _get_time_minutes(get_time());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Return an estimate of the memory consumed by the time estimator.
 | 
			
		||||
	size_t GCodeTimeEstimator::memory_used() const
 | 
			
		||||
    {
 | 
			
		||||
        size_t out = sizeof(*this);
 | 
			
		||||
#if WIN32
 | 
			
		||||
	#define STDVEC_MEMSIZE(NAME, TYPE) NAME.capacity() * ((sizeof(TYPE) + __alignof(TYPE) - 1) / __alignof(TYPE)) * __alignof(TYPE)
 | 
			
		||||
#else
 | 
			
		||||
	#define STDVEC_MEMSIZE(NAME, TYPE) NAME.capacity() * ((sizeof(TYPE) + alignof(TYPE) - 1) / alignof(TYPE)) * alignof(TYPE)
 | 
			
		||||
#endif
 | 
			
		||||
		out += STDVEC_MEMSIZE(this->_blocks, Block);
 | 
			
		||||
		out += STDVEC_MEMSIZE(this->_g1_line_ids, G1LineIdToBlockId);
 | 
			
		||||
#undef STDVEC_MEMSIZE
 | 
			
		||||
        return out;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void GCodeTimeEstimator::_reset()
 | 
			
		||||
    {
 | 
			
		||||
        _curr.reset();
 | 
			
		||||
| 
						 | 
				
			
			@ -1072,7 +1088,7 @@ namespace Slic3r {
 | 
			
		|||
 | 
			
		||||
        // adds block to blocks list
 | 
			
		||||
        _blocks.emplace_back(block);
 | 
			
		||||
        _g1_line_ids.insert(G1LineIdToBlockIdMap::value_type(get_g1_line_id(), (unsigned int)_blocks.size() - 1));
 | 
			
		||||
        _g1_line_ids.emplace_back(G1LineIdToBlockIdMap::value_type(get_g1_line_id(), (unsigned int)_blocks.size() - 1));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void GCodeTimeEstimator::_processG4(const GCodeReader::GCodeLine& line)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -209,7 +209,8 @@ namespace Slic3r {
 | 
			
		|||
        typedef std::map<Block::EMoveType, MoveStats> MovesStatsMap;
 | 
			
		||||
#endif // ENABLE_MOVE_STATS
 | 
			
		||||
 | 
			
		||||
        typedef std::map<unsigned int, unsigned int> G1LineIdToBlockIdMap;
 | 
			
		||||
        typedef std::pair<unsigned int, unsigned int> G1LineIdToBlockId;
 | 
			
		||||
        typedef std::vector<G1LineIdToBlockId> G1LineIdToBlockIdMap;
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        EMode _mode;
 | 
			
		||||
| 
						 | 
				
			
			@ -338,6 +339,9 @@ namespace Slic3r {
 | 
			
		|||
        // Returns the estimated time, in minutes (integer)
 | 
			
		||||
        std::string get_time_minutes() const;
 | 
			
		||||
 | 
			
		||||
        // Return an estimate of the memory consumed by the time estimator.
 | 
			
		||||
        size_t memory_used() const;
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        void _reset();
 | 
			
		||||
        void _reset_time();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,8 @@ namespace Slic3r {
 | 
			
		|||
 | 
			
		||||
extern void set_logging_level(unsigned int level);
 | 
			
		||||
extern void trace(unsigned int level, const char *message);
 | 
			
		||||
// Format memory allocated, separate thousands by comma.
 | 
			
		||||
extern std::string format_memsize_MB(size_t n);
 | 
			
		||||
// Return string to be added to the boost::log output to inform about the current process memory allocation.
 | 
			
		||||
// The string is non-empty only if the loglevel >= info (3).
 | 
			
		||||
extern std::string log_memory_info();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue