ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/lib/cf.pm
(Generate patch)

Comparing deliantra/server/lib/cf.pm (file contents):
Revision 1.363 by root, Mon Sep 10 17:24:36 2007 UTC vs.
Revision 1.365 by root, Tue Sep 11 13:27:56 2007 UTC

2458 my $gen = $self->{_goto_generation} = ++$GOTOGEN; 2458 my $gen = $self->{_goto_generation} = ++$GOTOGEN;
2459 2459
2460 $self->enter_link; 2460 $self->enter_link;
2461 2461
2462 (async { 2462 (async {
2463 # *tag paths override both path and x|y
2464 if ($path =~ /^\*(.*)$/) {
2465 if (my @obs = grep $_->map, ext::map_tags::find $1) {
2466 my $ob = $obs[rand @obs];
2467 ($path, $x, $y) = ($ob->map, $ob->x, $ob->y);
2468 }
2469 }
2470
2463 my $map = eval { 2471 my $map = eval {
2464 my $map = cf::map::find $path; 2472 my $map = cf::map::find $path;
2465 2473
2466 if ($map) { 2474 if ($map) {
2467 $map = $map->customise_for ($self); 2475 $map = $map->customise_for ($self);
3445 my $signal = new Coro::Signal; 3453 my $signal = new Coro::Signal;
3446 push @WAIT_FOR_TICK_BEGIN, $signal; 3454 push @WAIT_FOR_TICK_BEGIN, $signal;
3447 $signal->wait; 3455 $signal->wait;
3448} 3456}
3449 3457
3450 my $min = 1e6;#d# 3458our $stat_fh;
3451 my $avg = 10; 3459sysopen $stat_fh, "/tmp/cfstats", Fcntl::O_APPEND | Fcntl::O_CREAT | Fcntl::O_WRONLY, 0600;#d#
3460
3452$TICK_WATCHER = Event->timer ( 3461$TICK_WATCHER = Event->timer (
3453 reentrant => 0, 3462 reentrant => 0,
3454 parked => 1, 3463 parked => 1,
3455 prio => 0, 3464 prio => 0,
3456 at => $NEXT_TICK || $TICK, 3465 at => $NEXT_TICK || $TICK,
3460 Carp::cluck "major BUG: server tick called outside of main coro, skipping it" 3469 Carp::cluck "major BUG: server tick called outside of main coro, skipping it"
3461 unless ++$bug_warning > 10; 3470 unless ++$bug_warning > 10;
3462 return; 3471 return;
3463 } 3472 }
3464 3473
3474 my @pl = cf::player::list; my $stats = sprintf "%.2f %d %d %d", $RUNTIME, (scalar @pl), cf::object::actives_size, cf::object::objects_size; #d#
3475
3465 $NOW = $tick_start = Event::time; 3476 $NOW = $tick_start = Event::time;
3466 3477
3467 cf::server_tick; # one server iteration 3478 cf::server_tick; # one server iteration
3468
3469 0 && sync_job {#d#
3470 for(1..10) {
3471 my $t = Event::time;
3472 my $map = my $map = new_from_path cf::map "/tmp/x.map"
3473 or die;
3474
3475 $map->width (50);
3476 $map->height (50);
3477 $map->alloc;
3478 $map->_load_objects ("/tmp/x.map", 1); #TODO: does not work
3479 my $t = Event::time - $t;
3480
3481 #next unless $t < 0.0013;#d#
3482 if ($t < $min) {
3483 $min = $t;
3484 }
3485 $avg = $avg * 0.99 + $t * 0.01;
3486 }
3487 warn "XXXXXXXXXXXXXXXXXX min $min avg $avg\n";#d#
3488 exit 0;
3489 # 2007-05-22 02:33:04.569 min 0.00112509727478027 avg 0.0012259249572477
3490 };
3491 3479
3492 $RUNTIME += $TICK; 3480 $RUNTIME += $TICK;
3493 $NEXT_TICK += $TICK; 3481 $NEXT_TICK += $TICK;
3494 3482
3495 if ($NOW >= $NEXT_RUNTIME_WRITE) { 3483 if ($NOW >= $NEXT_RUNTIME_WRITE) {
3521 $LOAD = ($NOW - $tick_start) / $TICK; 3509 $LOAD = ($NOW - $tick_start) / $TICK;
3522 $LOADAVG = $LOADAVG * 0.75 + $LOAD * 0.25; 3510 $LOADAVG = $LOADAVG * 0.75 + $LOAD * 0.25;
3523 3511
3524 _post_tick; 3512 _post_tick;
3525 3513
3526 3514 # gather some statistics#d#
3515 $stats .= sprintf " %d\n", 10000 * ($NOW - $tick_start);#d#
3516 IO::AIO::aio_write $stat_fh, undef, undef, $stats, 0;#d#
3527 }, 3517 },
3528); 3518);
3529 3519
3530{ 3520{
3531 BDB::min_parallel 8; 3521 BDB::min_parallel 8;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines