1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
#! /bin/sh /usr/share/dpatch/dpatch-run
## 24_improve_reminder_performance.dpatch by Marc 'HE' Brockschmidt <he@debian.org>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Does more caching and less checking for events to remind for, greatly
## DP: lowering the number of cpu cycles wasted.
@DPATCH@
--- old/lib/PerlPanel/Applet/Clock.pm 2005-04-14 18:23:19.000000000 +0200
+++ new/lib/PerlPanel/Applet/Clock.pm 2005-04-14 18:28:52.000000000 +0200
@@ -41,6 +41,8 @@
our $REMINDER_DIALOG_FMT = "<span weight=\"bold\" size=\"x-large\">%s</span>\n\n%s";
+our %TIMESTAMP_CACHE;
+
sub new {
my $self = {};
$self->{package} = shift;
@@ -77,6 +79,7 @@
$self->{glade}->get_widget('reminder_dialog')->set_icon(PerlPanel::icon);
PerlPanel::add_timeout(1000, sub { $self->update });
+ PerlPanel::add_timeout(60000, sub { $self->show_reminders });
$self->widget->show_all;
return 1;
}
@@ -85,7 +88,6 @@
my $self = shift;
$self->{label}->set_text(' '.my_strftime($self->{config}{format}, time()).' ');
PerlPanel::tips->set_tip($self->widget, my_strftime($self->{config}{date_format}, time()));
- $self->show_reminders;
return 1;
}
@@ -382,8 +384,10 @@
my $now = time();
foreach my $event (grep { $_->{reminder} > 0 && defined($_->{date}) } @{$self->{config}->{events}}) {
+ next if $event->{reminded} eq 'true';
+
my $timestamp = $self->get_timestamp_for($event);
- if ($event->{reminder} > 0 && ($timestamp - ($event->{reminder} * 60)) < $now && $event->{reminded} ne 'true' && $event->{notes} ne '') {
+ if ($event->{reminder} > 0 && ($timestamp - ($event->{reminder} * 60)) < $now && $event->{notes} ne '') {
$event->{reminded} = 'true';
PerlPanel::save_config();
$self->reminder($event);
@@ -410,9 +414,14 @@
sub get_timestamp_for {
my ($self, $event) = @_;
- my ($year, $month, $day) = split(/-/, $event->{date}, 3);
- my ($hour, $min) = split(/:/, $event->{time}, 2);
- return strtotime(sprintf('%04d-%02d-%02d %02d:%02d:00', $year, $month+1, $day, $hour, $min));
+
+ unless ($TIMESTAMP_CACHE{$event->{date} . " " . $event->{time}}) {
+ my ($year, $month, $day) = split(/-/, $event->{date}, 3);
+ my ($hour, $min) = split(/:/, $event->{time}, 2);
+ $TIMESTAMP_CACHE{$event->{date} . " " . $event->{time}} = strtotime(sprintf('%04d-%02d-%02d %02d:%02d:00', $year, $month+1, $day, $hour, $min));
+ }
+
+ return $TIMESTAMP_CACHE{$event->{date} . " " . $event->{time}};
}
sub my_strftime {
|