time: Make timer use fc::time_point instead of fc::time_point_sec so witness plugin can control quantization

This commit is contained in:
theoreticalbts 2015-08-29 20:18:17 -04:00
parent dd9dbca38c
commit c14494fb68
4 changed files with 11 additions and 8 deletions

View file

@ -231,7 +231,7 @@ namespace detail {
genesis_state_type genesis = fc::json::from_file(_options->at("genesis-json").as<boost::filesystem::path>()).as<genesis_state_type>();
if( _options->count("genesis-timestamp") )
{
genesis.initial_timestamp = graphene::time::now() + genesis.initial_parameters.block_interval + _options->at("genesis-timestamp").as<uint32_t>();
genesis.initial_timestamp = fc::time_point_sec( graphene::time::now() ) + genesis.initial_parameters.block_interval + _options->at("genesis-timestamp").as<uint32_t>();
genesis.initial_timestamp -= genesis.initial_timestamp.sec_since_epoch() % genesis.initial_parameters.block_interval;
std::cerr << "Used genesis timestamp: " << genesis.initial_timestamp.to_iso_string() << " (PLEASE RECORD THIS)\n";
}

View file

@ -177,8 +177,10 @@ void witness_plugin::plugin_shutdown()
void witness_plugin::schedule_production_loop()
{
//Schedule for the next second's tick regardless of chain state
fc::time_point_sec next_second( graphene::time::now().sec_since_epoch() + 1 );
wdump( (next_second) );
// If we would wait less than 200ms, wait for the whole second.
fc::time_point now = graphene::time::now();
fc::time_point_sec next_second( now + fc::microseconds( 1200000 ) );
wdump( (now.time_since_epoch().count())(next_second) );
_block_production_task = fc::schedule([this]{block_production_loop();},
next_second, "Witness Block Production");
}
@ -239,7 +241,8 @@ block_production_condition::block_production_condition_enum witness_plugin::bloc
block_production_condition::block_production_condition_enum witness_plugin::maybe_produce_block( fc::mutable_variant_object& capture )
{
chain::database& db = database();
fc::time_point_sec now = graphene::time::now();
fc::time_point now_fine = graphene::time::now();
fc::time_point_sec now = now_fine + fc::microseconds( 500000 );
// If the next block production opportunity is in the present or future, we're synced.
if( !_production_enabled )

View file

@ -27,8 +27,8 @@ namespace graphene { namespace time {
extern time_discontinuity_signal_type time_discontinuity_signal;
fc::optional<fc::time_point> ntp_time();
fc::time_point_sec now();
fc::time_point_sec nonblocking_now(); // identical to now() but guaranteed not to block
fc::time_point now();
fc::time_point nonblocking_now(); // identical to now() but guaranteed not to block
void update_ntp_time();
fc::microseconds ntp_error();
void shutdown_ntp_time();

View file

@ -60,7 +60,7 @@ void shutdown_ntp_time()
delete actual_ntp_service;
}
fc::time_point_sec now()
fc::time_point now()
{
if( simulated_time )
return fc::time_point() + fc::seconds( simulated_time + adjusted_time_sec );
@ -72,7 +72,7 @@ fc::time_point_sec now()
return fc::time_point::now() + fc::seconds( adjusted_time_sec );
}
fc::time_point_sec nonblocking_now()
fc::time_point nonblocking_now()
{
if (simulated_time)
return fc::time_point() + fc::seconds(simulated_time + adjusted_time_sec);