- if (m_draw_control.range_all)
- return;
-
- m_added_busytime += busytime_in;
- m_added_frames += 1;
-
- m_frametime_counter -= frametime_in;
- if (m_frametime_counter > 0)
- return;
- m_frametime_counter = 0.2; // Same as ClientMap::updateDrawList interval
-
- /*dstream<<__FUNCTION_NAME
- <<": Collected "<<m_added_frames<<" frames, total of "
- <<m_added_busytime<<"s."<<std::endl;
-
- dstream<<"m_draw_control.blocks_drawn="
- <<m_draw_control.blocks_drawn
- <<", m_draw_control.blocks_would_have_drawn="
- <<m_draw_control.blocks_would_have_drawn
- <<std::endl;*/
-
- // Get current viewing range and FPS settings
- f32 viewing_range_min = g_settings->getS16("viewing_range_nodes_min");
- viewing_range_min = MYMAX(15.0, viewing_range_min);
-
- f32 viewing_range_max = g_settings->getS16("viewing_range_nodes_max");
- viewing_range_max = MYMAX(viewing_range_min, viewing_range_max);
-
- // Immediately apply hard limits
- if(m_draw_control.wanted_range < viewing_range_min)
- m_draw_control.wanted_range = viewing_range_min;
- if(m_draw_control.wanted_range > viewing_range_max)
- m_draw_control.wanted_range = viewing_range_max;
-
- // Just so big a value that everything rendered is visible
- // Some more allowance than viewing_range_max * BS because of clouds,
- // active objects, etc.
- if(viewing_range_max < 200*BS)
- m_cameranode->setFarValue(200 * BS * 10);
- else
- m_cameranode->setFarValue(viewing_range_max * BS * 10);
-
- f32 wanted_fps = g_settings->getFloat("wanted_fps");
- wanted_fps = MYMAX(wanted_fps, 1.0);
- f32 wanted_frametime = 1.0 / wanted_fps;
-
- m_draw_control.wanted_min_range = viewing_range_min;
- m_draw_control.wanted_max_blocks = (2.0*m_draw_control.blocks_would_have_drawn)+1;
- if (m_draw_control.wanted_max_blocks < 10)
- m_draw_control.wanted_max_blocks = 10;
-
- f32 block_draw_ratio = 1.0;
- if (m_draw_control.blocks_would_have_drawn != 0)
- {
- block_draw_ratio = (f32)m_draw_control.blocks_drawn
- / (f32)m_draw_control.blocks_would_have_drawn;
- }
-
- // Calculate the average frametime in the case that all wanted
- // blocks had been drawn
- f32 frametime = m_added_busytime / m_added_frames / block_draw_ratio;
-
- m_added_busytime = 0.0;
- m_added_frames = 0;
-
- f32 wanted_frametime_change = wanted_frametime - frametime;
- //dstream<<"wanted_frametime_change="<<wanted_frametime_change<<std::endl;
- g_profiler->avg("wanted_frametime_change", wanted_frametime_change);
-
- // If needed frametime change is small, just return
- // This value was 0.4 for many months until 2011-10-18 by c55;
- if (fabs(wanted_frametime_change) < wanted_frametime*0.33)
- {
- //dstream<<"ignoring small wanted_frametime_change"<<std::endl;